#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int /*<<< orphan*/ array;

/* Variables and functions */
int /*<<< orphan*/ free(double **);
double **malloc(int);
int /*<<< orphan*/ printf(char *, double);
int main() {
  int dim1 = 5;
  int dim2 = 20;
  int i, j;
  double(*array)[dim2] = malloc(sizeof(array) * dim1 * dim2);
  for (i = 0; i < dim1; i++) {
    for (j = 0; j < dim2; j++) {
      array[i][j] = i + j;
    }
  }
  for (i = 0; i < dim1; i++) {
    for (j = 0; j < dim2; j++) {
      printf("%f \n", array[i][j]);
    }
  }
  free(array);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x5,-0x8(%rbp)
movl   $0x14,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    %rax,-0x28(%rbp)
movslq -0x8(%rbp),%rax
shl    $0x3,%rax
movslq -0xc(%rbp),%rcx
imul   %rcx,%rax
mov    %eax,%edi
call   1050 <malloc@plt>
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    11e0 <main+0xb0>
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11cd <main+0x9d>
mov    -0x28(%rbp),%rdx
mov    -0x10(%rbp),%eax
add    -0x14(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1189 <main+0x59>
jmp    11d2 <main+0xa2>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1176 <main+0x46>
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1253 <main+0x123>
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1240 <main+0x110>
mov    -0x28(%rbp),%rdx
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
lea    0xdd3(%rip),%rdi
call   1040 <printf@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11fa <main+0xca>
jmp    1245 <main+0x115>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    11e7 <main+0xb7>
mov    -0x20(%rbp),%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %rbx
mov    $0x320,%edi
call   1050 <malloc@plt>
mov    %rax,%r15
xorps  %xmm0,%xmm0
movhps 0xeb4(%rip),%xmm0
movups %xmm0,(%rax)
movaps 0xeb9(%rip),%xmm12
movups %xmm12,0x10(%rax)
movaps 0xebd(%rip),%xmm0
movups %xmm0,0x20(%rax)
movaps 0xec2(%rip),%xmm2
movups %xmm2,0x30(%rax)
movaps 0xec7(%rip),%xmm1
movups %xmm1,0x40(%rax)
movaps 0xecc(%rip),%xmm0
movups %xmm0,0x50(%rax)
movaps 0xed0(%rip),%xmm13
movups %xmm13,0x60(%rax)
movaps 0xed3(%rip),%xmm14
movups %xmm14,0x70(%rax)
movaps 0xed6(%rip),%xmm15
movups %xmm15,0x80(%rax)
movaps 0xed6(%rip),%xmm11
movups %xmm11,0x90(%rax)
movaps 0xed7(%rip),%xmm0
movups %xmm0,0xa0(%rax)
movaps 0xed8(%rip),%xmm10
movups %xmm10,0xb0(%rax)
movaps 0xed8(%rip),%xmm9
movups %xmm9,0xc0(%rax)
movaps 0xed8(%rip),%xmm8
movups %xmm8,0xd0(%rax)
movaps 0xed9(%rip),%xmm7
movups %xmm7,0xe0(%rax)
movaps 0xedb(%rip),%xmm4
movups %xmm4,0xf0(%rax)
movaps 0xedd(%rip),%xmm5
movups %xmm5,0x100(%rax)
movaps 0xedf(%rip),%xmm6
movups %xmm6,0x110(%rax)
movaps 0xee1(%rip),%xmm3
movups %xmm3,0x120(%rax)
movaps 0xee3(%rip),%xmm0
movups %xmm0,0x130(%rax)
movups %xmm12,0x140(%rax)
movaps 0xdbc(%rip),%xmm12
movups %xmm12,0x150(%rax)
movups %xmm2,0x160(%rax)
movups %xmm1,0x170(%rax)
movaps %xmm1,%xmm12
movaps 0xdcb(%rip),%xmm1
movups %xmm1,0x180(%rax)
movups %xmm13,0x190(%rax)
movups %xmm14,0x1a0(%rax)
movups %xmm15,0x1b0(%rax)
movups %xmm11,0x1c0(%rax)
movaps 0xe8d(%rip),%xmm2
movups %xmm2,0x1d0(%rax)
movups %xmm10,0x1e0(%rax)
movups %xmm9,0x1f0(%rax)
movups %xmm8,0x200(%rax)
movups %xmm7,0x210(%rax)
movups %xmm4,0x220(%rax)
movups %xmm5,0x230(%rax)
movups %xmm6,0x240(%rax)
movups %xmm3,0x250(%rax)
movups %xmm0,0x260(%rax)
movaps 0xe4d(%rip),%xmm0
movups %xmm0,0x270(%rax)
movaps 0xd0f(%rip),%xmm0
movups %xmm0,0x280(%rax)
movaps 0xd11(%rip),%xmm0
movups %xmm0,0x290(%rax)
movups %xmm12,0x2a0(%rax)
movups %xmm1,0x2b0(%rax)
movups %xmm13,0x2c0(%rax)
movups %xmm14,0x2d0(%rax)
movups %xmm15,0x2e0(%rax)
movups %xmm11,0x2f0(%rax)
movups %xmm2,0x300(%rax)
movaps 0xdfd(%rip),%xmm0
movups %xmm0,0x310(%rax)
mov    $0x98,%ebx
lea    0xdfa(%rip),%r14
cs nopw 0x0(%rax,%rax,1)
movsd  -0x98(%r15,%rbx,1),%xmm0
ff ff ff
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x90(%r15,%rbx,1),%xmm0
ff ff ff
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x88(%r15,%rbx,1),%xmm0
ff ff ff
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x80(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x78(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x70(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x68(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x60(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x58(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x50(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x48(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x40(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x38(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x30(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x28(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x20(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x18(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x10(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  -0x8(%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
movsd  (%r15,%rbx,1),%xmm0
mov    %r14,%rdi
call   1040 <printf@plt>
add    $0xa0,%rbx
cmp    $0x3b8,%rbx
jne    1380 <main+0x250>
mov    %r15,%rdi
call   1030 <free@plt>
xor    %eax,%eax
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@.str = [5 x i8] c"%f \0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca double*
store i32 0, i32* %1
store i32 5, i32* %2
store i32 20, i32* %3
%7 = load i32, i32* %3
%8 = zext i32 %7 to i64
%9 = load i32, i32* %2
%10 = sext i32 %9 to i64
%11 = mul i64 8, %10
%12 = load i32, i32* %3
%13 = sext i32 %12 to i64
%14 = mul i64 %11, %13
%15 = trunc i64 %14 to i32
%16 = call double** @malloc(i32 %15)
%17 = bitcast double** %16 to double*
store double* %17, double** %6
store i32 0, i32* %4
br label %18
18: ; preds = %44, %0
%19 = load i32, i32* %4
%20 = load i32, i32* %2
%21 = icmp slt i32 %19, %20
br i1 %21, label %22, label %47
22: ; preds = %18
store i32 0, i32* %5
br label %23
23: ; preds = %40, %22
%24 = load i32, i32* %5
%25 = load i32, i32* %3
%26 = icmp slt i32 %24, %25
br i1 %26, label %27, label %43
27: ; preds = %23
%28 = load i32, i32* %4
%29 = load i32, i32* %5
%30 = add nsw i32 %28, %29
%31 = sitofp i32 %30 to double
%32 = load double*, double** %6
%33 = load i32, i32* %4
%34 = sext i32 %33 to i64
%35 = mul nsw i64 %34, %8
%36 = getelementptr inbounds double, double* %32, i64 %35
%37 = load i32, i32* %5
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds double, double* %36, i64 %38
store double %31, double* %39
br label %40
40: ; preds = %27
%41 = load i32, i32* %5
%42 = add nsw i32 %41, 1
store i32 %42, i32* %5
br label %23
43: ; preds = %23
br label %44
44: ; preds = %43
%45 = load i32, i32* %4
%46 = add nsw i32 %45, 1
store i32 %46, i32* %4
br label %18
47: ; preds = %18
store i32 0, i32* %4
br label %48
48: ; preds = %72, %47
%49 = load i32, i32* %4
%50 = load i32, i32* %2
%51 = icmp slt i32 %49, %50
br i1 %51, label %52, label %75
52: ; preds = %48
store i32 0, i32* %5
br label %53
53: ; preds = %68, %52
%54 = load i32, i32* %5
%55 = load i32, i32* %3
%56 = icmp slt i32 %54, %55
br i1 %56, label %57, label %71
57: ; preds = %53
%58 = load double*, double** %6
%59 = load i32, i32* %4
%60 = sext i32 %59 to i64
%61 = mul nsw i64 %60, %8
%62 = getelementptr inbounds double, double* %58, i64 %61
%63 = load i32, i32* %5
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds double, double* %62, i64 %64
%66 = load double, double* %65
%67 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %66)
br label %68
68: ; preds = %57
%69 = load i32, i32* %5
%70 = add nsw i32 %69, 1
store i32 %70, i32* %5
br label %53
71: ; preds = %53
br label %72
72: ; preds = %71
%73 = load i32, i32* %4
%74 = add nsw i32 %73, 1
store i32 %74, i32* %4
br label %48
75: ; preds = %48
%76 = load double*, double** %6
%77 = bitcast double* %76 to double**
%78 = call i32 @free(double** %77)
ret i32 0
}

LLVM IR (-O2):
@.str = [5 x i8] c"%f \0A\00"
define i32 @main() {
%1 = tail call double** @malloc(i32 800)
%2 = bitcast double** %1 to <2 x double>*
store <2 x double> <double 0.000000e+00, double 1.000000e+00>, <2 x double>* %2
%3 = getelementptr inbounds double*, double** %1, i64 2
%4 = bitcast double** %3 to <2 x double>*
store <2 x double> <double 2.000000e+00, double 3.000000e+00>, <2 x double>* %4
%5 = getelementptr inbounds double*, double** %1, i64 4
%6 = bitcast double** %5 to <2 x double>*
store <2 x double> <double 4.000000e+00, double 5.000000e+00>, <2 x double>* %6
%7 = getelementptr inbounds double*, double** %1, i64 6
%8 = bitcast double** %7 to <2 x double>*
store <2 x double> <double 6.000000e+00, double 7.000000e+00>, <2 x double>* %8
%9 = getelementptr inbounds double*, double** %1, i64 8
%10 = bitcast double** %9 to <2 x double>*
store <2 x double> <double 8.000000e+00, double 9.000000e+00>, <2 x double>* %10
%11 = getelementptr inbounds double*, double** %1, i64 10
%12 = bitcast double** %11 to <2 x double>*
store <2 x double> <double 1.000000e+01, double 1.100000e+01>, <2 x double>* %12
%13 = getelementptr inbounds double*, double** %1, i64 12
%14 = bitcast double** %13 to <2 x double>*
store <2 x double> <double 1.200000e+01, double 1.300000e+01>, <2 x double>* %14
%15 = getelementptr inbounds double*, double** %1, i64 14
%16 = bitcast double** %15 to <2 x double>*
store <2 x double> <double 1.400000e+01, double 1.500000e+01>, <2 x double>* %16
%17 = getelementptr inbounds double*, double** %1, i64 16
%18 = bitcast double** %17 to <2 x double>*
store <2 x double> <double 1.600000e+01, double 1.700000e+01>, <2 x double>* %18
%19 = getelementptr inbounds double*, double** %1, i64 18
%20 = bitcast double** %19 to <2 x double>*
store <2 x double> <double 1.800000e+01, double 1.900000e+01>, <2 x double>* %20
%21 = getelementptr inbounds double*, double** %1, i64 20
%22 = bitcast double** %21 to <2 x double>*
store <2 x double> <double 1.000000e+00, double 2.000000e+00>, <2 x double>* %22
%23 = getelementptr inbounds double*, double** %1, i64 22
%24 = bitcast double** %23 to <2 x double>*
store <2 x double> <double 3.000000e+00, double 4.000000e+00>, <2 x double>* %24
%25 = getelementptr inbounds double*, double** %1, i64 24
%26 = bitcast double** %25 to <2 x double>*
store <2 x double> <double 5.000000e+00, double 6.000000e+00>, <2 x double>* %26
%27 = getelementptr inbounds double*, double** %1, i64 26
%28 = bitcast double** %27 to <2 x double>*
store <2 x double> <double 7.000000e+00, double 8.000000e+00>, <2 x double>* %28
%29 = getelementptr inbounds double*, double** %1, i64 28
%30 = bitcast double** %29 to <2 x double>*
store <2 x double> <double 9.000000e+00, double 1.000000e+01>, <2 x double>* %30
%31 = getelementptr inbounds double*, double** %1, i64 30
%32 = bitcast double** %31 to <2 x double>*
store <2 x double> <double 1.100000e+01, double 1.200000e+01>, <2 x double>* %32
%33 = getelementptr inbounds double*, double** %1, i64 32
%34 = bitcast double** %33 to <2 x double>*
store <2 x double> <double 1.300000e+01, double 1.400000e+01>, <2 x double>* %34
%35 = getelementptr inbounds double*, double** %1, i64 34
%36 = bitcast double** %35 to <2 x double>*
store <2 x double> <double 1.500000e+01, double 1.600000e+01>, <2 x double>* %36
%37 = getelementptr inbounds double*, double** %1, i64 36
%38 = bitcast double** %37 to <2 x double>*
store <2 x double> <double 1.700000e+01, double 1.800000e+01>, <2 x double>* %38
%39 = getelementptr inbounds double*, double** %1, i64 38
%40 = bitcast double** %39 to <2 x double>*
store <2 x double> <double 1.900000e+01, double 2.000000e+01>, <2 x double>* %40
%41 = getelementptr inbounds double*, double** %1, i64 40
%42 = bitcast double** %41 to <2 x double>*
store <2 x double> <double 2.000000e+00, double 3.000000e+00>, <2 x double>* %42
%43 = getelementptr inbounds double*, double** %1, i64 42
%44 = bitcast double** %43 to <2 x double>*
store <2 x double> <double 4.000000e+00, double 5.000000e+00>, <2 x double>* %44
%45 = getelementptr inbounds double*, double** %1, i64 44
%46 = bitcast double** %45 to <2 x double>*
store <2 x double> <double 6.000000e+00, double 7.000000e+00>, <2 x double>* %46
%47 = getelementptr inbounds double*, double** %1, i64 46
%48 = bitcast double** %47 to <2 x double>*
store <2 x double> <double 8.000000e+00, double 9.000000e+00>, <2 x double>* %48
%49 = getelementptr inbounds double*, double** %1, i64 48
%50 = bitcast double** %49 to <2 x double>*
store <2 x double> <double 1.000000e+01, double 1.100000e+01>, <2 x double>* %50
%51 = getelementptr inbounds double*, double** %1, i64 50
%52 = bitcast double** %51 to <2 x double>*
store <2 x double> <double 1.200000e+01, double 1.300000e+01>, <2 x double>* %52
%53 = getelementptr inbounds double*, double** %1, i64 52
%54 = bitcast double** %53 to <2 x double>*
store <2 x double> <double 1.400000e+01, double 1.500000e+01>, <2 x double>* %54
%55 = getelementptr inbounds double*, double** %1, i64 54
%56 = bitcast double** %55 to <2 x double>*
store <2 x double> <double 1.600000e+01, double 1.700000e+01>, <2 x double>* %56
%57 = getelementptr inbounds double*, double** %1, i64 56
%58 = bitcast double** %57 to <2 x double>*
store <2 x double> <double 1.800000e+01, double 1.900000e+01>, <2 x double>* %58
%59 = getelementptr inbounds double*, double** %1, i64 58
%60 = bitcast double** %59 to <2 x double>*
store <2 x double> <double 2.000000e+01, double 2.100000e+01>, <2 x double>* %60
%61 = getelementptr inbounds double*, double** %1, i64 60
%62 = bitcast double** %61 to <2 x double>*
store <2 x double> <double 3.000000e+00, double 4.000000e+00>, <2 x double>* %62
%63 = getelementptr inbounds double*, double** %1, i64 62
%64 = bitcast double** %63 to <2 x double>*
store <2 x double> <double 5.000000e+00, double 6.000000e+00>, <2 x double>* %64
%65 = getelementptr inbounds double*, double** %1, i64 64
%66 = bitcast double** %65 to <2 x double>*
store <2 x double> <double 7.000000e+00, double 8.000000e+00>, <2 x double>* %66
%67 = getelementptr inbounds double*, double** %1, i64 66
%68 = bitcast double** %67 to <2 x double>*
store <2 x double> <double 9.000000e+00, double 1.000000e+01>, <2 x double>* %68
%69 = getelementptr inbounds double*, double** %1, i64 68
%70 = bitcast double** %69 to <2 x double>*
store <2 x double> <double 1.100000e+01, double 1.200000e+01>, <2 x double>* %70
%71 = getelementptr inbounds double*, double** %1, i64 70
%72 = bitcast double** %71 to <2 x double>*
store <2 x double> <double 1.300000e+01, double 1.400000e+01>, <2 x double>* %72
%73 = getelementptr inbounds double*, double** %1, i64 72
%74 = bitcast double** %73 to <2 x double>*
store <2 x double> <double 1.500000e+01, double 1.600000e+01>, <2 x double>* %74
%75 = getelementptr inbounds double*, double** %1, i64 74
%76 = bitcast double** %75 to <2 x double>*
store <2 x double> <double 1.700000e+01, double 1.800000e+01>, <2 x double>* %76
%77 = getelementptr inbounds double*, double** %1, i64 76
%78 = bitcast double** %77 to <2 x double>*
store <2 x double> <double 1.900000e+01, double 2.000000e+01>, <2 x double>* %78
%79 = getelementptr inbounds double*, double** %1, i64 78
%80 = bitcast double** %79 to <2 x double>*
store <2 x double> <double 2.100000e+01, double 2.200000e+01>, <2 x double>* %80
%81 = getelementptr inbounds double*, double** %1, i64 80
%82 = bitcast double** %81 to <2 x double>*
store <2 x double> <double 4.000000e+00, double 5.000000e+00>, <2 x double>* %82
%83 = getelementptr inbounds double*, double** %1, i64 82
%84 = bitcast double** %83 to <2 x double>*
store <2 x double> <double 6.000000e+00, double 7.000000e+00>, <2 x double>* %84
%85 = getelementptr inbounds double*, double** %1, i64 84
%86 = bitcast double** %85 to <2 x double>*
store <2 x double> <double 8.000000e+00, double 9.000000e+00>, <2 x double>* %86
%87 = getelementptr inbounds double*, double** %1, i64 86
%88 = bitcast double** %87 to <2 x double>*
store <2 x double> <double 1.000000e+01, double 1.100000e+01>, <2 x double>* %88
%89 = getelementptr inbounds double*, double** %1, i64 88
%90 = bitcast double** %89 to <2 x double>*
store <2 x double> <double 1.200000e+01, double 1.300000e+01>, <2 x double>* %90
%91 = getelementptr inbounds double*, double** %1, i64 90
%92 = bitcast double** %91 to <2 x double>*
store <2 x double> <double 1.400000e+01, double 1.500000e+01>, <2 x double>* %92
%93 = getelementptr inbounds double*, double** %1, i64 92
%94 = bitcast double** %93 to <2 x double>*
store <2 x double> <double 1.600000e+01, double 1.700000e+01>, <2 x double>* %94
%95 = getelementptr inbounds double*, double** %1, i64 94
%96 = bitcast double** %95 to <2 x double>*
store <2 x double> <double 1.800000e+01, double 1.900000e+01>, <2 x double>* %96
%97 = getelementptr inbounds double*, double** %1, i64 96
%98 = bitcast double** %97 to <2 x double>*
store <2 x double> <double 2.000000e+01, double 2.100000e+01>, <2 x double>* %98
%99 = getelementptr inbounds double*, double** %1, i64 98
%100 = bitcast double** %99 to <2 x double>*
store <2 x double> <double 2.200000e+01, double 2.300000e+01>, <2 x double>* %100
br label %101
101: ; preds = %0, %101
%102 = phi i64 [ 0, %0 ], [ %184, %101 ]
%103 = mul nuw nsw i64 %102, 20
%104 = getelementptr inbounds double*, double** %1, i64 %103
%105 = bitcast double** %104 to double*
%106 = load double, double* %105
%107 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %106)
%108 = getelementptr inbounds double*, double** %104, i64 1
%109 = bitcast double** %108 to double*
%110 = load double, double* %109
%111 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %110)
%112 = getelementptr inbounds double*, double** %104, i64 2
%113 = bitcast double** %112 to double*
%114 = load double, double* %113
%115 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %114)
%116 = getelementptr inbounds double*, double** %104, i64 3
%117 = bitcast double** %116 to double*
%118 = load double, double* %117
%119 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %118)
%120 = getelementptr inbounds double*, double** %104, i64 4
%121 = bitcast double** %120 to double*
%122 = load double, double* %121
%123 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %122)
%124 = getelementptr inbounds double*, double** %104, i64 5
%125 = bitcast double** %124 to double*
%126 = load double, double* %125
%127 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %126)
%128 = getelementptr inbounds double*, double** %104, i64 6
%129 = bitcast double** %128 to double*
%130 = load double, double* %129
%131 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %130)
%132 = getelementptr inbounds double*, double** %104, i64 7
%133 = bitcast double** %132 to double*
%134 = load double, double* %133
%135 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %134)
%136 = getelementptr inbounds double*, double** %104, i64 8
%137 = bitcast double** %136 to double*
%138 = load double, double* %137
%139 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %138)
%140 = getelementptr inbounds double*, double** %104, i64 9
%141 = bitcast double** %140 to double*
%142 = load double, double* %141
%143 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %142)
%144 = getelementptr inbounds double*, double** %104, i64 10
%145 = bitcast double** %144 to double*
%146 = load double, double* %145
%147 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %146)
%148 = getelementptr inbounds double*, double** %104, i64 11
%149 = bitcast double** %148 to double*
%150 = load double, double* %149
%151 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %150)
%152 = getelementptr inbounds double*, double** %104, i64 12
%153 = bitcast double** %152 to double*
%154 = load double, double* %153
%155 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %154)
%156 = getelementptr inbounds double*, double** %104, i64 13
%157 = bitcast double** %156 to double*
%158 = load double, double* %157
%159 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %158)
%160 = getelementptr inbounds double*, double** %104, i64 14
%161 = bitcast double** %160 to double*
%162 = load double, double* %161
%163 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %162)
%164 = getelementptr inbounds double*, double** %104, i64 15
%165 = bitcast double** %164 to double*
%166 = load double, double* %165
%167 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %166)
%168 = getelementptr inbounds double*, double** %104, i64 16
%169 = bitcast double** %168 to double*
%170 = load double, double* %169
%171 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %170)
%172 = getelementptr inbounds double*, double** %104, i64 17
%173 = bitcast double** %172 to double*
%174 = load double, double* %173
%175 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %174)
%176 = getelementptr inbounds double*, double** %104, i64 18
%177 = bitcast double** %176 to double*
%178 = load double, double* %177
%179 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %178)
%180 = getelementptr inbounds double*, double** %104, i64 19
%181 = bitcast double** %180 to double*
%182 = load double, double* %181
%183 = tail call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), double %182)
%184 = add nuw nsw i64 %102, 1
%185 = icmp eq i64 %184, 5
br i1 %185, label %186, label %101
186: ; preds = %101
%187 = tail call i32 @free(double** %1)
ret i32 0
}