int test1(void) {
  float rpys[5][3] = {{-0.9426, -1.9063, -1.5640},
                      {0.7291, -0.1678, -0.9321},
                      {2.0787, 0.5357, 0.3124},
                      {2.6213, -1.3456, 1.6160},
                      {1.5942, -0.7512, 0.4261}};
  float omegas[5][3] = {{-84.8291, -89.2100, 6.1595},
                        {55.8334, 86.8021, -74.0188},
                        {13.7647, -6.1219, -97.6196},
                        {-32.5755, -67.5635, 58.8569},
                        {-37.7570, 5.7066, -66.8703}};
  float rotrpys[5][3];
  float rotomegas[5][3];
  float crotrpys[5][3] = {
      {-1.954478153761925, -1.027571868934493, -0.630103580058686},
      {0.440214467557604, -0.621863318529118, -0.226089611057829},
      {2.009120029973903, -0.171189617196501, -0.044104238120300},
      {-1.877985854666314, -0.875318184331965, -0.247290835422163},
      {2.036290551651717, -1.532682829893402, -0.023124096893764},
  };
  float crotomegas[5][3] = {
      {3.0977343900000, -123.0630476100000, 6.1595000000000},
      {-21.8979677700000, 100.8575620500000, -74.0188000000000},
      {14.0618148600000, 5.4042238800000, -97.6196000000000},
      {24.7400148000000, -070.8082869000000, 58.8569000000000},
      {-30.7331115600000, -022.6628378400000, -66.8703000000000},
  };
  int i;
  int errorcount = 0;
  for (i = 0; i < 5; i++) {
    rotateRPY(rpys[i], rotrpys[i]);
    rotateGyro(omegas[i], rotomegas[i]);
    if (array_eq(rotrpys[i], crotrpys[i], 3, 1E-5) == 0) {
      errorcount += 1;
      printf("Expected: \t%f %f %f\nGot: \t\t%f %f %f\n\n", crotrpys[i][0],
             crotrpys[i][1], crotrpys[i][2], rotrpys[i][0], rotrpys[i][1],
             rotrpys[i][2]);
    }
    if (array_eq(rotomegas[i], crotomegas[i], 3, 1E-5) == 0) {
      errorcount += 1;
      printf("Expected: \t%f %f %f\nGot: \t\t%f %f %f\n\n", crotomegas[i][0],
             crotomegas[i][1], crotomegas[i][2], rotomegas[i][0],
             rotomegas[i][1], rotomegas[i][2]);
    }
  }
  return errorcount;
}


x86 assembly (clang, -O0):
<test1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x190,%rsp
lea    -0x40(%rbp),%rdi
lea    0xeaa(%rip),%rsi
mov    $0x3c,%edx
call   1070 <memcpy@plt>
lea    -0x80(%rbp),%rdi
lea    0xed5(%rip),%rsi
mov    $0x3c,%edx
call   1070 <memcpy@plt>
lea    -0x140(%rbp),%rdi
lea    0xefd(%rip),%rsi
mov    $0x3c,%edx
call   1070 <memcpy@plt>
lea    -0x180(%rbp),%rdi
lea    0xf25(%rip),%rsi
mov    $0x3c,%edx
call   1070 <memcpy@plt>
movl   $0x0,-0x188(%rbp)
movl   $0x0,-0x184(%rbp)
cmpl   $0x5,-0x184(%rbp)
jge    1477 <test1+0x327>
movslq -0x184(%rbp),%rax
lea    -0x40(%rbp),%rdi
imul   $0xc,%rax,%rax
add    %rax,%rdi
movslq -0x184(%rbp),%rax
lea    -0xc0(%rbp),%rsi
imul   $0xc,%rax,%rax
add    %rax,%rsi
mov    $0x0,%al
call   1050 <rotateRPY@plt>
movslq -0x184(%rbp),%rax
lea    -0x80(%rbp),%rdi
imul   $0xc,%rax,%rax
add    %rax,%rdi
movslq -0x184(%rbp),%rax
lea    -0x100(%rbp),%rsi
imul   $0xc,%rax,%rax
add    %rax,%rsi
mov    $0x0,%al
call   1030 <rotateGyro@plt>
movslq -0x184(%rbp),%rax
lea    -0xc0(%rbp),%rdi
imul   $0xc,%rax,%rax
add    %rax,%rdi
movslq -0x184(%rbp),%rax
lea    -0x140(%rbp),%rsi
imul   $0xc,%rax,%rax
add    %rax,%rsi
mov    $0x3,%edx
movsd  0xd97(%rip),%xmm0
mov    $0x1,%al
call   1060 <array_eq@plt>
cmp    $0x0,%eax
jne    1348 <test1+0x1f8>
mov    -0x188(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x188(%rbp)
movslq -0x184(%rbp),%rcx
lea    -0x140(%rbp),%rax
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movslq -0x184(%rbp),%rcx
lea    -0x140(%rbp),%rax
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movss  0x4(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
movslq -0x184(%rbp),%rcx
lea    -0x140(%rbp),%rax
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movss  0x8(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
movslq -0x184(%rbp),%rcx
lea    -0xc0(%rbp),%rax
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movss  (%rax),%xmm3
cvtss2sd %xmm3,%xmm3
movslq -0x184(%rbp),%rcx
lea    -0xc0(%rbp),%rax
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movss  0x4(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
movslq -0x184(%rbp),%rcx
lea    -0xc0(%rbp),%rax
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movss  0x8(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
lea    0xdcb(%rip),%rdi
mov    $0x6,%al
call   1040 <printf@plt>
movslq -0x184(%rbp),%rax
lea    -0x100(%rbp),%rdi
imul   $0xc,%rax,%rax
add    %rax,%rdi
movslq -0x184(%rbp),%rax
lea    -0x180(%rbp),%rsi
imul   $0xc,%rax,%rax
add    %rax,%rsi
mov    $0x3,%edx
movsd  0xc81(%rip),%xmm0
mov    $0x1,%al
call   1060 <array_eq@plt>
cmp    $0x0,%eax
jne    145e <test1+0x30e>
mov    -0x188(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x188(%rbp)
movslq -0x184(%rbp),%rcx
lea    -0x180(%rbp),%rax
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
movslq -0x184(%rbp),%rcx
lea    -0x180(%rbp),%rax
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movss  0x4(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
movslq -0x184(%rbp),%rcx
lea    -0x180(%rbp),%rax
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movss  0x8(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
movslq -0x184(%rbp),%rcx
lea    -0x100(%rbp),%rax
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movss  (%rax),%xmm3
cvtss2sd %xmm3,%xmm3
movslq -0x184(%rbp),%rcx
lea    -0x100(%rbp),%rax
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movss  0x4(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
movslq -0x184(%rbp),%rcx
lea    -0x100(%rbp),%rax
imul   $0xc,%rcx,%rcx
add    %rcx,%rax
movss  0x8(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
lea    0xcb5(%rip),%rdi
mov    $0x6,%al
call   1040 <printf@plt>
jmp    1463 <test1+0x313>
mov    -0x184(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x184(%rbp)
jmp    11c9 <test1+0x79>
mov    -0x188(%rbp),%eax
add    $0x190,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<test1>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x180,%rsp
movups 0xee6(%rip),%xmm0
movups %xmm0,0xec(%rsp)
movaps 0xecb(%rip),%xmm0
movaps %xmm0,0xe0(%rsp)
movaps 0xeac(%rip),%xmm0
movaps %xmm0,0xd0(%rsp)
movaps 0xe8d(%rip),%xmm0
movaps %xmm0,0xc0(%rsp)
movups 0xeea(%rip),%xmm0
movups %xmm0,0xac(%rsp)
movaps 0xecf(%rip),%xmm0
movaps %xmm0,0xa0(%rsp)
movaps 0xeb0(%rip),%xmm0
movaps %xmm0,0x90(%rsp)
movaps 0xe91(%rip),%xmm0
movaps %xmm0,0x80(%rsp)
movups 0xeee(%rip),%xmm0
movups %xmm0,0x6c(%rsp)
movaps 0xed6(%rip),%xmm0
movaps %xmm0,0x60(%rsp)
movaps 0xeba(%rip),%xmm0
movaps %xmm0,0x50(%rsp)
movaps 0xe9e(%rip),%xmm0
movaps %xmm0,0x40(%rsp)
movups 0xefe(%rip),%xmm0
movups %xmm0,0x2c(%rsp)
movaps 0xee6(%rip),%xmm0
movaps %xmm0,0x20(%rsp)
movaps 0xeca(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movaps 0xeae(%rip),%xmm0
movaps %xmm0,(%rsp)
lea    0xedf(%rip),%r14
xor    %ebx,%ebx
xor    %r15d,%r15d
jmp    124e <test1+0x10e>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0xc,%rbx
cmp    $0x3c,%rbx
je     137e <test1+0x23e>
lea    (%rsp,%rbx,1),%rdi
add    $0xc0,%rdi
lea    (%rsp,%rbx,1),%rbp
add    $0x140,%rbp
mov    %rbp,%rsi
xor    %eax,%eax
call   1050 <rotateRPY@plt>
lea    (%rsp,%rbx,1),%rdi
add    $0x80,%rdi
lea    (%rsp,%rbx,1),%r12
add    $0x100,%r12
mov    %r12,%rsi
xor    %eax,%eax
call   1030 <rotateGyro@plt>
lea    (%rsp,%rbx,1),%rsi
add    $0x40,%rsi
mov    %rbp,%rdi
mov    $0x3,%edx
movsd  0xd5a(%rip),%xmm0
mov    $0x1,%al
call   1060 <array_eq@plt>
test   %eax,%eax
jne    1304 <test1+0x1c4>
add    $0x1,%r15d
movss  0x40(%rsp,%rbx,1),%xmm0
movss  0x44(%rsp,%rbx,1),%xmm1
cvtss2sd %xmm0,%xmm0
cvtss2sd %xmm1,%xmm1
movss  0x48(%rsp,%rbx,1),%xmm2
cvtss2sd %xmm2,%xmm2
movss  0x140(%rsp,%rbx,1),%xmm3
movss  0x144(%rsp,%rbx,1),%xmm4
cvtss2sd %xmm3,%xmm3
cvtss2sd %xmm4,%xmm4
movss  0x148(%rsp,%rbx,1),%xmm5
cvtss2sd %xmm5,%xmm5
mov    %r14,%rdi
mov    $0x6,%al
call   1040 <printf@plt>
lea    (%rsp,%rbx,1),%rsi
mov    %r12,%rdi
mov    $0x3,%edx
movsd  0xce8(%rip),%xmm0
mov    $0x1,%al
call   1060 <array_eq@plt>
test   %eax,%eax
jne    1240 <test1+0x100>
add    $0x1,%r15d
movss  (%rsp,%rbx,1),%xmm0
movss  0x4(%rsp,%rbx,1),%xmm1
cvtss2sd %xmm0,%xmm0
cvtss2sd %xmm1,%xmm1
movss  0x8(%rsp,%rbx,1),%xmm2
cvtss2sd %xmm2,%xmm2
movss  0x100(%rsp,%rbx,1),%xmm3
movss  0x104(%rsp,%rbx,1),%xmm4
cvtss2sd %xmm3,%xmm3
cvtss2sd %xmm4,%xmm4
movss  0x108(%rsp,%rbx,1),%xmm5
cvtss2sd %xmm5,%xmm5
mov    %r14,%rdi
mov    $0x6,%al
call   1040 <printf@plt>
jmp    1240 <test1+0x100>
mov    %r15d,%eax
add    $0x180,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@__const.test1.rpys = [5 x [3 x float]] [[3 x float] [float 0xBFEE29C780000000, float 0xBFFE803460000000, float 0xBFF90624E0000000], [3 x float] [float 0x3FE754C980000000, float 0xBFC57A7860000000, float 0xBFEDD3C360000000], [3 x float] [float 0x4000A12D80000000, float 0x3FE1247460000000, float 0x3FD3FE5CA0000000], [3 x float] [float 0x4004F86C20000000, float 0xBFF58793E0000000, float 0x3FF9DB22E0000000], [3 x float] [float 0x3FF981D7E0000000, float 0xBFE809D4A0000000, float 0x3FDB4538E0000000]]
@__const.test1.omegas = [5 x [3 x float]] [[3 x float] [float 0xC055351000000000, float 0xC0564D70A0000000, float 0x4018A35400000000], [3 x float] [float 0x404BEAACE0000000, float 0x4055B355A0000000, float 0xC052813400000000], [3 x float] [float 0x402B8786C0000000, float 0xC0187CD360000000, float 0xC05867A780000000], [3 x float] [float 0xC04049AA00000000, float 0xC050E41060000000, float 0x404D6DAEE0000000], [3 x float] [float 0xC042E0E560000000, float 0x4016D38F00000000, float 0xC050B7B300000000]]
@__const.test1.crotrpys = [5 x [3 x float]] [[3 x float] [float 0xBFFF458AE0000000, float 0xBFF070EF40000000, float 0xBFE429CF00000000], [3 x float] [float 0x3FDC2C7940000000, float 0xBFE3E64DE0000000, float 0xBFCCF08120000000], [3 x float] [float 0x400012AD80000000, float 0xBFC5E98AA0000000, float 0xBFA694D4A0000000], [3 x float] [float 0xBFFE0C3AE0000000, float 0xBFEC029B40000000, float 0xBFCFA739E0000000], [3 x float] [float 0x40004A52C0000000, float 0xBFF885DE60000000, float 0xBF97ADD7E0000000]]
@__const.test1.crotomegas = [5 x [3 x float]] [[3 x float] [float 0x4008C82900000000, float 0xC05EC40900000000, float 0x4018A35400000000], [3 x float] [float 0xC035E5E140000000, float 0x405936E240000000, float 0xC052813400000000], [3 x float] [float 0x402C1FA640000000, float 0x40159DECE0000000, float 0xC05867A780000000], [3 x float] [float 0x4038BD71A0000000, float 0xC051B3BB00000000, float 0x404D6DAEE0000000], [3 x float] [float 0xC03EBBAD40000000, float 0xC036A9AFC0000000, float 0xC050B7B300000000]]
@.str = [38 x i8] c"Expected: \09%f %f %f\0AGot: \09\09%f %f %f\0A\0A\00"
define i32 @test1() {
%1 = alloca [5 x [3 x float]]
%2 = alloca [5 x [3 x float]]
%3 = alloca [5 x [3 x float]]
%4 = alloca [5 x [3 x float]]
%5 = alloca [5 x [3 x float]]
%6 = alloca [5 x [3 x float]]
%7 = alloca i32
%8 = alloca i32
%9 = bitcast [5 x [3 x float]]* %1 to i8*
%10 = bitcast [5 x [3 x float]]* %2 to i8*
%11 = bitcast [5 x [3 x float]]* %5 to i8*
%12 = bitcast [5 x [3 x float]]* %6 to i8*
store i32 0, i32* %8
store i32 0, i32* %7
br label %13
13: ; preds = %137, %0
%14 = load i32, i32* %7
%15 = icmp slt i32 %14, 5
br i1 %15, label %16, label %140
16: ; preds = %13
%17 = load i32, i32* %7
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %1, i64 0, i64 %18
%20 = getelementptr inbounds [3 x float], [3 x float]* %19, i64 0, i64 0
%21 = load i32, i32* %7
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %3, i64 0, i64 %22
%24 = getelementptr inbounds [3 x float], [3 x float]* %23, i64 0, i64 0
%25 = call i32 (float*, float*, ...) bitcast (i32 (...)* @rotateRPY to i32 (float*, float*, ...)*)(float* %20, float* %24)
%26 = load i32, i32* %7
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %2, i64 0, i64 %27
%29 = getelementptr inbounds [3 x float], [3 x float]* %28, i64 0, i64 0
%30 = load i32, i32* %7
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %4, i64 0, i64 %31
%33 = getelementptr inbounds [3 x float], [3 x float]* %32, i64 0, i64 0
%34 = call i32 (float*, float*, ...) bitcast (i32 (...)* @rotateGyro to i32 (float*, float*, ...)*)(float* %29, float* %33)
%35 = load i32, i32* %7
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %3, i64 0, i64 %36
%38 = getelementptr inbounds [3 x float], [3 x float]* %37, i64 0, i64 0
%39 = load i32, i32* %7
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %5, i64 0, i64 %40
%42 = getelementptr inbounds [3 x float], [3 x float]* %41, i64 0, i64 0
%43 = call i32 (float*, float*, i32, double, ...) bitcast (i32 (...)* @array_eq to i32 (float*, float*, i32, double, ...)*)(float* %38, float* %42, i32 3, double 1.000000e-05)
%44 = icmp eq i32 %43, 0
br i1 %44, label %45, label %85
45: ; preds = %16
%46 = load i32, i32* %8
%47 = add nsw i32 %46, 1
store i32 %47, i32* %8
%48 = load i32, i32* %7
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %5, i64 0, i64 %49
%51 = getelementptr inbounds [3 x float], [3 x float]* %50, i64 0, i64 0
%52 = load float, float* %51
%53 = fpext float %52 to double
%54 = load i32, i32* %7
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %5, i64 0, i64 %55
%57 = getelementptr inbounds [3 x float], [3 x float]* %56, i64 0, i64 1
%58 = load float, float* %57
%59 = fpext float %58 to double
%60 = load i32, i32* %7
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %5, i64 0, i64 %61
%63 = getelementptr inbounds [3 x float], [3 x float]* %62, i64 0, i64 2
%64 = load float, float* %63
%65 = fpext float %64 to double
%66 = load i32, i32* %7
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %3, i64 0, i64 %67
%69 = getelementptr inbounds [3 x float], [3 x float]* %68, i64 0, i64 0
%70 = load float, float* %69
%71 = fpext float %70 to double
%72 = load i32, i32* %7
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %3, i64 0, i64 %73
%75 = getelementptr inbounds [3 x float], [3 x float]* %74, i64 0, i64 1
%76 = load float, float* %75
%77 = fpext float %76 to double
%78 = load i32, i32* %7
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %3, i64 0, i64 %79
%81 = getelementptr inbounds [3 x float], [3 x float]* %80, i64 0, i64 2
%82 = load float, float* %81
%83 = fpext float %82 to double
%84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str, i64 0, i64 0), double %53, double %59, double %65, double %71, double %77, double %83)
br label %85
85: ; preds = %45, %16
%86 = load i32, i32* %7
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %4, i64 0, i64 %87
%89 = getelementptr inbounds [3 x float], [3 x float]* %88, i64 0, i64 0
%90 = load i32, i32* %7
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %6, i64 0, i64 %91
%93 = getelementptr inbounds [3 x float], [3 x float]* %92, i64 0, i64 0
%94 = call i32 (float*, float*, i32, double, ...) bitcast (i32 (...)* @array_eq to i32 (float*, float*, i32, double, ...)*)(float* %89, float* %93, i32 3, double 1.000000e-05)
%95 = icmp eq i32 %94, 0
br i1 %95, label %96, label %136
96: ; preds = %85
%97 = load i32, i32* %8
%98 = add nsw i32 %97, 1
store i32 %98, i32* %8
%99 = load i32, i32* %7
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %6, i64 0, i64 %100
%102 = getelementptr inbounds [3 x float], [3 x float]* %101, i64 0, i64 0
%103 = load float, float* %102
%104 = fpext float %103 to double
%105 = load i32, i32* %7
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %6, i64 0, i64 %106
%108 = getelementptr inbounds [3 x float], [3 x float]* %107, i64 0, i64 1
%109 = load float, float* %108
%110 = fpext float %109 to double
%111 = load i32, i32* %7
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %6, i64 0, i64 %112
%114 = getelementptr inbounds [3 x float], [3 x float]* %113, i64 0, i64 2
%115 = load float, float* %114
%116 = fpext float %115 to double
%117 = load i32, i32* %7
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %4, i64 0, i64 %118
%120 = getelementptr inbounds [3 x float], [3 x float]* %119, i64 0, i64 0
%121 = load float, float* %120
%122 = fpext float %121 to double
%123 = load i32, i32* %7
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %4, i64 0, i64 %124
%126 = getelementptr inbounds [3 x float], [3 x float]* %125, i64 0, i64 1
%127 = load float, float* %126
%128 = fpext float %127 to double
%129 = load i32, i32* %7
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %4, i64 0, i64 %130
%132 = getelementptr inbounds [3 x float], [3 x float]* %131, i64 0, i64 2
%133 = load float, float* %132
%134 = fpext float %133 to double
%135 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str, i64 0, i64 0), double %104, double %110, double %116, double %122, double %128, double %134)
br label %136
136: ; preds = %96, %85
br label %137
137: ; preds = %136
%138 = load i32, i32* %7
%139 = add nsw i32 %138, 1
store i32 %139, i32* %7
br label %13
140: ; preds = %13
%141 = load i32, i32* %8
ret i32 %141
}

LLVM IR (-O2):
@__const.test1.rpys = [5 x [3 x float]] [[3 x float] [float 0xBFEE29C780000000, float 0xBFFE803460000000, float 0xBFF90624E0000000], [3 x float] [float 0x3FE754C980000000, float 0xBFC57A7860000000, float 0xBFEDD3C360000000], [3 x float] [float 0x4000A12D80000000, float 0x3FE1247460000000, float 0x3FD3FE5CA0000000], [3 x float] [float 0x4004F86C20000000, float 0xBFF58793E0000000, float 0x3FF9DB22E0000000], [3 x float] [float 0x3FF981D7E0000000, float 0xBFE809D4A0000000, float 0x3FDB4538E0000000]]
@__const.test1.omegas = [5 x [3 x float]] [[3 x float] [float 0xC055351000000000, float 0xC0564D70A0000000, float 0x4018A35400000000], [3 x float] [float 0x404BEAACE0000000, float 0x4055B355A0000000, float 0xC052813400000000], [3 x float] [float 0x402B8786C0000000, float 0xC0187CD360000000, float 0xC05867A780000000], [3 x float] [float 0xC04049AA00000000, float 0xC050E41060000000, float 0x404D6DAEE0000000], [3 x float] [float 0xC042E0E560000000, float 0x4016D38F00000000, float 0xC050B7B300000000]]
@__const.test1.crotrpys = [5 x [3 x float]] [[3 x float] [float 0xBFFF458AE0000000, float 0xBFF070EF40000000, float 0xBFE429CF00000000], [3 x float] [float 0x3FDC2C7940000000, float 0xBFE3E64DE0000000, float 0xBFCCF08120000000], [3 x float] [float 0x400012AD80000000, float 0xBFC5E98AA0000000, float 0xBFA694D4A0000000], [3 x float] [float 0xBFFE0C3AE0000000, float 0xBFEC029B40000000, float 0xBFCFA739E0000000], [3 x float] [float 0x40004A52C0000000, float 0xBFF885DE60000000, float 0xBF97ADD7E0000000]]
@__const.test1.crotomegas = [5 x [3 x float]] [[3 x float] [float 0x4008C82900000000, float 0xC05EC40900000000, float 0x4018A35400000000], [3 x float] [float 0xC035E5E140000000, float 0x405936E240000000, float 0xC052813400000000], [3 x float] [float 0x402C1FA640000000, float 0x40159DECE0000000, float 0xC05867A780000000], [3 x float] [float 0x4038BD71A0000000, float 0xC051B3BB00000000, float 0x404D6DAEE0000000], [3 x float] [float 0xC03EBBAD40000000, float 0xC036A9AFC0000000, float 0xC050B7B300000000]]
@.str = [38 x i8] c"Expected: \09%f %f %f\0AGot: \09\09%f %f %f\0A\0A\00"
define i32 @test1() {
%1 = alloca [5 x [3 x float]]
%2 = alloca [5 x [3 x float]]
%3 = alloca [5 x [3 x float]]
%4 = alloca [5 x [3 x float]]
%5 = alloca [5 x [3 x float]]
%6 = alloca [5 x [3 x float]]
%7 = bitcast [5 x [3 x float]]* %1 to i8*
%8 = bitcast [5 x [3 x float]]* %2 to i8*
%9 = bitcast [5 x [3 x float]]* %3 to i8*
%10 = bitcast [5 x [3 x float]]* %4 to i8*
%11 = bitcast [5 x [3 x float]]* %5 to i8*
%12 = bitcast [5 x [3 x float]]* %6 to i8*
br label %13
13: ; preds = %0, %68
%14 = phi i64 [ 0, %0 ], [ %70, %68 ]
%15 = phi i32 [ 0, %0 ], [ %69, %68 ]
%16 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %1, i64 0, i64 %14, i64 0
%17 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %3, i64 0, i64 %14, i64 0
%18 = call i32 (float*, float*, ...) bitcast (i32 (...)* @rotateRPY to i32 (float*, float*, ...)*)(float* %16, float* %17)
%19 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %2, i64 0, i64 %14, i64 0
%20 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %4, i64 0, i64 %14, i64 0
%21 = call i32 (float*, float*, ...) bitcast (i32 (...)* @rotateGyro to i32 (float*, float*, ...)*)(float* %19, float* %20)
%22 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %5, i64 0, i64 %14, i64 0
%23 = call i32 (float*, float*, i32, double, ...) bitcast (i32 (...)* @array_eq to i32 (float*, float*, i32, double, ...)*)(float* %17, float* %22, i32 3, double 1.000000e-05)
%24 = icmp eq i32 %23, 0
br i1 %24, label %25, label %44
25: ; preds = %13
%26 = add nsw i32 %15, 1
%27 = load float, float* %22
%28 = fpext float %27 to double
%29 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %5, i64 0, i64 %14, i64 1
%30 = load float, float* %29
%31 = fpext float %30 to double
%32 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %5, i64 0, i64 %14, i64 2
%33 = load float, float* %32
%34 = fpext float %33 to double
%35 = load float, float* %17
%36 = fpext float %35 to double
%37 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %3, i64 0, i64 %14, i64 1
%38 = load float, float* %37
%39 = fpext float %38 to double
%40 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %3, i64 0, i64 %14, i64 2
%41 = load float, float* %40
%42 = fpext float %41 to double
%43 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @.str, i64 0, i64 0), double %28, double %31, double %34, double %36, double %39, double %42)
br label %44
44: ; preds = %25, %13
%45 = phi i32 [ %26, %25 ], [ %15, %13 ]
%46 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %6, i64 0, i64 %14, i64 0
%47 = call i32 (float*, float*, i32, double, ...) bitcast (i32 (...)* @array_eq to i32 (float*, float*, i32, double, ...)*)(float* %20, float* %46, i32 3, double 1.000000e-05)
%48 = icmp eq i32 %47, 0
br i1 %48, label %49, label %68
49: ; preds = %44
%50 = add nsw i32 %45, 1
%51 = load float, float* %46
%52 = fpext float %51 to double
%53 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %6, i64 0, i64 %14, i64 1
%54 = load float, float* %53
%55 = fpext float %54 to double
%56 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %6, i64 0, i64 %14, i64 2
%57 = load float, float* %56
%58 = fpext float %57 to double
%59 = load float, float* %20
%60 = fpext float %59 to double
%61 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %4, i64 0, i64 %14, i64 1
%62 = load float, float* %61
%63 = fpext float %62 to double
%64 = getelementptr inbounds [5 x [3 x float]], [5 x [3 x float]]* %4, i64 0, i64 %14, i64 2
%65 = load float, float* %64
%66 = fpext float %65 to double
%67 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @.str, i64 0, i64 0), double %52, double %55, double %58, double %60, double %63, double %66)
br label %68
68: ; preds = %44, %49
%69 = phi i32 [ %50, %49 ], [ %45, %44 ]
%70 = add nuw nsw i64 %14, 1
%71 = icmp eq i64 %70, 5
br i1 %71, label %72, label %13
72: ; preds = %68
ret i32 %69
}