#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 uint32_t;

/* Variables and functions */
int /*<<< orphan*/ f2m_mult(int, int *, int *, int *);
int /*<<< orphan*/ f2m_square(int, int *, int *);
int /*<<< orphan*/ initZero(int, int *);
int /*<<< orphan*/ testeqprint(char *, int /*<<< orphan*/, int, int *, int *);
void multtest() {
  uint32_t t = 1;
  uint32_t testnr = 1;
  uint32_t z[1] = {0x0};
  uint32_t a[1] = {0x00000001};
  uint32_t b[1] = {0x00000002};
  uint32_t c[1] = {0x00000003};
  uint32_t d[1] = {0x00000006};
  uint32_t e[1] = {0x00000007};
  uint32_t f[1] = {0x80000000};
  uint32_t g[1] = {0x00000002};
  uint32_t h[2] = {0x0, 0x00000001};
  uint32_t j[6] = {0xA9, 0x100, 0x0, 0x0, 0x0, 0x0};
  uint32_t k[12] = {0x4441, 0x0, 0x10000, 0x0, 0x0, 0x0,
                    0x0,    0x0, 0x0,     0x0, 0x0, 0x0};
  uint32_t l[24] = {0x10101001, 0x0, 0x0, 0x0, 0x0, 0x00000001, 0x0, 0x0,
                    0x0,        0x0, 0x0, 0x0, 0x0, 0x0,        0x0, 0x0,
                    0x0,        0x0, 0x0, 0x0, 0x0, 0x0,        0x0, 0x0};
  uint32_t m[12] = {0x15005055, 0x14504414, 0x1, 0x0, 0x0, 0x0,
                    0x0,        0x1,        0x0, 0x0, 0x0, 0x40000000};
  uint32_t n[24] = {0x11001111, 0x1110000, 0x10100110, 0x1101100, 0x1, 0x0, 0x0,
                    0x0,        0x0,       0x0,        0x0,       0x0, 0x0, 0x0,
                    0x1,        0x0,       0x0,        0x0,       0x0, 0x0, 0x0,
                    0x0,        0x0,       0x10000000};
  uint32_t o[2] = {0xF000000F, 0xF000000F};
  uint32_t r4[4];
  uint32_t r4_2[4];
  initZero(4, r4);
  initZero(4, r4_2);
  f2m_mult(2, o, o, r4);
  f2m_square(2, o, r4_2);
  testeqprint("multtest", testnr++, 4, r4, r4_2);
  uint32_t r1[1] = {0x0};
  uint32_t r2[2] = {0x0, 0x0};
  uint32_t r12[12];
  initZero(12, r12);
  uint32_t r24[24];
  initZero(24, r24);
  f2m_mult(t, z, z, r1);
  testeqprint("multtest", testnr++, t, z, r1);
  initZero(t, r1);
  f2m_mult(t, a, b, r1);
  testeqprint("multtest", testnr++, t, b, r1);
  initZero(t, r1);
  f2m_mult(t, a, c, r1);
  testeqprint("multtest", testnr++, t, c, r1);
  initZero(t, r1);
  f2m_mult(t, b, c, r1);
  testeqprint("multtest", testnr++, t, d, r1);
  initZero(t, r1);
  f2m_mult(t, f, g, r2);
  testeqprint("multtest", testnr++, 2, h, r2);
  initZero(t, r2);
  f2m_mult(6, j, j, r12);
  testeqprint("multtest", testnr++, 12, k, r12);
  initZero(12, r12);
  f2m_mult(12, k, k, r24);
  testeqprint("multtest", testnr++, 24, l, r24);
  initZero(24, r24);
  f2m_mult(12, m, m, r24);
  testeqprint("multtest", testnr++, 24, n, r24);
  initZero(24, r24);
}


x86 assembly (clang, -O0):
<multtest>:
push   %rbp
mov    %rsp,%rbp
sub    $0x240,%rsp
movl   $0x1,-0x4(%rbp)
movl   $0x1,-0x8(%rbp)
lea    -0xc(%rbp),%rdi
xor    %esi,%esi
mov    $0x4,%edx
call   1040 <memset@plt>
mov    0xe71(%rip),%eax
mov    %eax,-0x10(%rbp)
mov    0xe6c(%rip),%eax
mov    %eax,-0x14(%rbp)
mov    0xe67(%rip),%eax
mov    %eax,-0x18(%rbp)
mov    0xe62(%rip),%eax
mov    %eax,-0x1c(%rbp)
mov    0xe5d(%rip),%eax
mov    %eax,-0x20(%rbp)
mov    0xe58(%rip),%eax
mov    %eax,-0x24(%rbp)
mov    0xe3f(%rip),%eax
mov    %eax,-0x28(%rbp)
mov    0xe49(%rip),%rax
mov    %rax,-0x30(%rbp)
mov    0xe56(%rip),%rax
mov    %rax,-0x50(%rbp)
mov    0xe53(%rip),%rax
mov    %rax,-0x48(%rbp)
mov    0xe50(%rip),%rax
mov    %rax,-0x40(%rbp)
lea    -0x80(%rbp),%rdi
xor    %esi,%esi
mov    $0x30,%edx
call   1040 <memset@plt>
movl   $0x4441,-0x80(%rbp)
movl   $0x10000,-0x78(%rbp)
lea    -0xe0(%rbp),%rdi
xor    %esi,%esi
mov    $0x60,%edx
call   1040 <memset@plt>
movl   $0x10101001,-0xe0(%rbp)
10 10 10
movl   $0x1,-0xcc(%rbp)
lea    -0x110(%rbp),%rdi
xor    %esi,%esi
mov    $0x30,%edx
call   1040 <memset@plt>
movl   $0x15005055,-0x110(%rbp)
movl   $0x14504414,-0x10c(%rbp)
44 50 14
movl   $0x1,-0x108(%rbp)
movl   $0x1,-0xf4(%rbp)
movl   $0x40000000,-0xe4(%rbp)
lea    -0x170(%rbp),%rdi
lea    0xdc4(%rip),%rsi
mov    $0x60,%edx
call   1050 <memcpy@plt>
mov    0xd83(%rip),%rax
mov    %rax,-0x178(%rbp)
lea    -0x190(%rbp),%rsi
mov    $0x4,%edi
call   1030 <initZero@plt>
lea    -0x1a0(%rbp),%rsi
mov    $0x4,%edi
call   1030 <initZero@plt>
lea    -0x178(%rbp),%rsi
lea    -0x178(%rbp),%rdx
lea    -0x190(%rbp),%rcx
mov    $0x2,%edi
call   1070 <f2m_mult@plt>
lea    -0x178(%rbp),%rsi
lea    -0x1a0(%rbp),%rdx
mov    $0x2,%edi
call   1060 <f2m_square@plt>
mov    -0x8(%rbp),%esi
mov    %esi,%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
lea    -0x190(%rbp),%rcx
lea    -0x1a0(%rbp),%r8
lea    0xd93(%rip),%rdi
mov    $0x4,%edx
call   1080 <testeqprint@plt>
lea    -0x1a4(%rbp),%rdi
xor    %esi,%esi
mov    $0x4,%edx
call   1040 <memset@plt>
lea    -0x1ac(%rbp),%rdi
xor    %esi,%esi
mov    $0x8,%edx
call   1040 <memset@plt>
lea    -0x1e0(%rbp),%rsi
mov    $0xc,%edi
call   1030 <initZero@plt>
lea    -0x240(%rbp),%rsi
mov    $0x18,%edi
call   1030 <initZero@plt>
mov    -0x4(%rbp),%edi
lea    -0xc(%rbp),%rsi
lea    -0xc(%rbp),%rdx
lea    -0x1a4(%rbp),%rcx
call   1070 <f2m_mult@plt>
mov    -0x8(%rbp),%esi
mov    %esi,%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%edx
lea    -0xc(%rbp),%rcx
lea    -0x1a4(%rbp),%r8
lea    0xd0a(%rip),%rdi
call   1080 <testeqprint@plt>
mov    -0x4(%rbp),%edi
lea    -0x1a4(%rbp),%rsi
call   1030 <initZero@plt>
mov    -0x4(%rbp),%edi
lea    -0x10(%rbp),%rsi
lea    -0x14(%rbp),%rdx
lea    -0x1a4(%rbp),%rcx
call   1070 <f2m_mult@plt>
mov    -0x8(%rbp),%esi
mov    %esi,%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%edx
lea    -0x14(%rbp),%rcx
lea    -0x1a4(%rbp),%r8
lea    0xcbf(%rip),%rdi
call   1080 <testeqprint@plt>
mov    -0x4(%rbp),%edi
lea    -0x1a4(%rbp),%rsi
call   1030 <initZero@plt>
mov    -0x4(%rbp),%edi
lea    -0x10(%rbp),%rsi
lea    -0x18(%rbp),%rdx
lea    -0x1a4(%rbp),%rcx
call   1070 <f2m_mult@plt>
mov    -0x8(%rbp),%esi
mov    %esi,%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%edx
lea    -0x18(%rbp),%rcx
lea    -0x1a4(%rbp),%r8
lea    0xc74(%rip),%rdi
call   1080 <testeqprint@plt>
mov    -0x4(%rbp),%edi
lea    -0x1a4(%rbp),%rsi
call   1030 <initZero@plt>
mov    -0x4(%rbp),%edi
lea    -0x14(%rbp),%rsi
lea    -0x18(%rbp),%rdx
lea    -0x1a4(%rbp),%rcx
call   1070 <f2m_mult@plt>
mov    -0x8(%rbp),%esi
mov    %esi,%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%edx
lea    -0x1c(%rbp),%rcx
lea    -0x1a4(%rbp),%r8
lea    0xc29(%rip),%rdi
call   1080 <testeqprint@plt>
mov    -0x4(%rbp),%edi
lea    -0x1a4(%rbp),%rsi
call   1030 <initZero@plt>
mov    -0x4(%rbp),%edi
lea    -0x24(%rbp),%rsi
lea    -0x28(%rbp),%rdx
lea    -0x1ac(%rbp),%rcx
call   1070 <f2m_mult@plt>
mov    -0x8(%rbp),%esi
mov    %esi,%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
lea    -0x30(%rbp),%rcx
lea    -0x1ac(%rbp),%r8
lea    0xbe1(%rip),%rdi
mov    $0x2,%edx
call   1080 <testeqprint@plt>
mov    -0x4(%rbp),%edi
lea    -0x1ac(%rbp),%rsi
call   1030 <initZero@plt>
lea    -0x50(%rbp),%rsi
lea    -0x50(%rbp),%rdx
lea    -0x1e0(%rbp),%rcx
mov    $0x6,%edi
call   1070 <f2m_mult@plt>
mov    -0x8(%rbp),%esi
mov    %esi,%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
lea    -0x80(%rbp),%rcx
lea    -0x1e0(%rbp),%r8
lea    0xb92(%rip),%rdi
mov    $0xc,%edx
call   1080 <testeqprint@plt>
lea    -0x1e0(%rbp),%rsi
mov    $0xc,%edi
call   1030 <initZero@plt>
lea    -0x80(%rbp),%rsi
lea    -0x80(%rbp),%rdx
lea    -0x240(%rbp),%rcx
mov    $0xc,%edi
call   1070 <f2m_mult@plt>
mov    -0x8(%rbp),%esi
mov    %esi,%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
lea    -0xe0(%rbp),%rcx
lea    -0x240(%rbp),%r8
lea    0xb3e(%rip),%rdi
mov    $0x18,%edx
call   1080 <testeqprint@plt>
lea    -0x240(%rbp),%rsi
mov    $0x18,%edi
call   1030 <initZero@plt>
lea    -0x110(%rbp),%rsi
lea    -0x110(%rbp),%rdx
lea    -0x240(%rbp),%rcx
mov    $0xc,%edi
call   1070 <f2m_mult@plt>
mov    -0x8(%rbp),%esi
mov    %esi,%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
lea    -0x170(%rbp),%rcx
lea    -0x240(%rbp),%r8
lea    0xae4(%rip),%rdi
mov    $0x18,%edx
call   1080 <testeqprint@plt>
lea    -0x240(%rbp),%rsi
mov    $0x18,%edi
call   1030 <initZero@plt>
add    $0x240,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<multtest>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x238,%rsp
movl   $0x0,0x24(%rsp)
movl   $0x1,0x20(%rsp)
movl   $0x2,0x1c(%rsp)
movl   $0x3,0x18(%rsp)
movl   $0x6,0x14(%rsp)
movl   $0x80000000,0x10(%rsp)
80
movl   $0x2,0xc(%rsp)
movabs $0x100000000,%rax
mov    %rax,0x38(%rsp)
mov    0xe71(%rip),%rax
mov    %rax,0xb0(%rsp)
movaps 0xe52(%rip),%xmm0
movaps %xmm0,0xa0(%rsp)
xorps  %xmm0,%xmm0
movaps %xmm0,0x70(%rsp)
movaps %xmm0,0x90(%rsp)
movaps %xmm0,0x80(%rsp)
movl   $0x4441,0x70(%rsp)
movl   $0x10000,0x78(%rsp)
movaps %xmm0,0xc0(%rsp)
movaps %xmm0,0xd0(%rsp)
movaps %xmm0,0x110(%rsp)
movaps %xmm0,0x100(%rsp)
movaps %xmm0,0xf0(%rsp)
movaps %xmm0,0xe0(%rsp)
movl   $0x10101001,0xc0(%rsp)
01 10 10 10
movl   $0x1,0xd4(%rsp)
movaps %xmm0,0x40(%rsp)
movaps %xmm0,0x50(%rsp)
movaps %xmm0,0x60(%rsp)
movabs $0x1450441415005055,%rax
44 50 14
mov    %rax,0x40(%rsp)
movl   $0x1,0x48(%rsp)
movl   $0x1,0x5c(%rsp)
movl   $0x40000000,0x6c(%rsp)
40
movaps 0xe0f(%rip),%xmm0
movaps %xmm0,0x170(%rsp)
movaps 0xdf0(%rip),%xmm0
movaps %xmm0,0x160(%rsp)
movaps 0xdd1(%rip),%xmm0
movaps %xmm0,0x150(%rsp)
movaps 0xdb2(%rip),%xmm0
movaps %xmm0,0x140(%rsp)
movaps 0xd93(%rip),%xmm0
movaps %xmm0,0x130(%rsp)
movaps 0xd74(%rip),%xmm0
movaps %xmm0,0x120(%rsp)
movabs $0xf000000ff000000f,%rax
mov    %rax,0x30(%rsp)
lea    0x190(%rsp),%r14
mov    $0x4,%edi
mov    %r14,%rsi
call   1030 <initZero@plt>
lea    0x180(%rsp),%r15
mov    $0x4,%edi
mov    %r15,%rsi
call   1030 <initZero@plt>
lea    0x30(%rsp),%rbx
mov    $0x2,%edi
mov    %rbx,%rsi
mov    %rbx,%rdx
mov    %r14,%rcx
call   1050 <f2m_mult@plt>
mov    $0x2,%edi
mov    %rbx,%rsi
mov    %r15,%rdx
call   1040 <f2m_square@plt>
lea    0xd64(%rip),%r12
mov    %r12,%rdi
mov    $0x1,%esi
mov    $0x4,%edx
mov    %r14,%rcx
mov    %r15,%r8
call   1060 <testeqprint@plt>
movl   $0x0,0x8(%rsp)
movq   $0x0,0x28(%rsp)
lea    0x1a0(%rsp),%rsi
mov    $0xc,%edi
call   1030 <initZero@plt>
lea    0x1d0(%rsp),%r14
mov    $0x18,%edi
mov    %r14,%rsi
call   1030 <initZero@plt>
lea    0x24(%rsp),%r13
lea    0x8(%rsp),%rbx
mov    $0x1,%edi
mov    %r13,%rsi
mov    %r13,%rdx
mov    %rbx,%rcx
call   1050 <f2m_mult@plt>
mov    %r12,%rdi
mov    $0x2,%esi
mov    $0x1,%edx
mov    %r13,%rcx
mov    %rbx,%r8
call   1060 <testeqprint@plt>
mov    $0x1,%edi
mov    %rbx,%rsi
call   1030 <initZero@plt>
lea    0x20(%rsp),%rbp
lea    0x1c(%rsp),%r13
mov    $0x1,%edi
mov    %rbp,%rsi
mov    %r13,%rdx
mov    %rbx,%rcx
call   1050 <f2m_mult@plt>
mov    %r12,%rdi
mov    $0x3,%esi
mov    $0x1,%edx
mov    %r13,%rcx
mov    %rbx,%r8
call   1060 <testeqprint@plt>
mov    $0x1,%edi
mov    %rbx,%rsi
call   1030 <initZero@plt>
lea    0x18(%rsp),%r15
mov    $0x1,%edi
mov    %rbp,%rsi
mov    %r15,%rdx
mov    %rbx,%rcx
call   1050 <f2m_mult@plt>
mov    %r12,%rdi
mov    $0x4,%esi
mov    $0x1,%edx
mov    %r15,%rcx
mov    %rbx,%r8
call   1060 <testeqprint@plt>
mov    $0x1,%edi
mov    %rbx,%rsi
call   1030 <initZero@plt>
mov    $0x1,%edi
mov    %r13,%rsi
mov    %r15,%rdx
mov    %rbx,%rcx
call   1050 <f2m_mult@plt>
lea    0x14(%rsp),%rcx
mov    %r12,%rdi
mov    $0x5,%esi
mov    $0x1,%edx
mov    %rbx,%r8
call   1060 <testeqprint@plt>
mov    $0x1,%edi
mov    %rbx,%rsi
call   1030 <initZero@plt>
lea    0x10(%rsp),%rsi
lea    0xc(%rsp),%rdx
lea    0x28(%rsp),%rbx
mov    $0x1,%edi
mov    %rbx,%rcx
call   1050 <f2m_mult@plt>
lea    0x38(%rsp),%rcx
mov    %r12,%rdi
mov    $0x6,%esi
mov    $0x2,%edx
mov    %rbx,%r8
call   1060 <testeqprint@plt>
mov    $0x1,%edi
mov    %rbx,%rsi
call   1030 <initZero@plt>
lea    0xa0(%rsp),%rdx
mov    $0x6,%edi
mov    %rdx,%rsi
lea    0x1a0(%rsp),%rbp
mov    %rbp,%rcx
call   1050 <f2m_mult@plt>
lea    0x70(%rsp),%rbx
mov    %r12,%rdi
mov    $0x7,%esi
mov    $0xc,%edx
mov    %rbx,%rcx
mov    %rbp,%r8
call   1060 <testeqprint@plt>
mov    $0xc,%edi
mov    %rbp,%rsi
call   1030 <initZero@plt>
mov    $0xc,%edi
mov    %rbx,%rsi
mov    %rbx,%rdx
mov    %r14,%rcx
call   1050 <f2m_mult@plt>
lea    0xc0(%rsp),%rcx
mov    %r12,%rdi
mov    $0x8,%esi
mov    $0x18,%edx
mov    %r14,%r8
call   1060 <testeqprint@plt>
mov    $0x18,%edi
mov    %r14,%rsi
call   1030 <initZero@plt>
lea    0x40(%rsp),%rdx
mov    $0xc,%edi
mov    %rdx,%rsi
mov    %r14,%rcx
call   1050 <f2m_mult@plt>
lea    0x120(%rsp),%rcx
mov    %r12,%rdi
mov    $0x9,%esi
mov    $0x18,%edx
mov    %r14,%r8
call   1060 <testeqprint@plt>
mov    $0x18,%edi
mov    %r14,%rsi
call   1030 <initZero@plt>
add    $0x238,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@__const.multtest.a = [1 x i32] [i32 1]
@__const.multtest.b = [1 x i32] [i32 2]
@__const.multtest.c = [1 x i32] [i32 3]
@__const.multtest.d = [1 x i32] [i32 6]
@__const.multtest.e = [1 x i32] [i32 7]
@__const.multtest.f = [1 x i32] [i32 -2147483648]
@__const.multtest.g = [1 x i32] [i32 2]
@__const.multtest.h = [2 x i32] [i32 0, i32 1]
@__const.multtest.j = [6 x i32] [i32 169, i32 256, i32 0, i32 0, i32 0, i32 0]
@__const.multtest.n = [24 x i32] [i32 285217041, i32 17891328, i32 269484304, i32 17830144, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 268435456]
@__const.multtest.o = [2 x i32] [i32 -268435441, i32 -268435441]
@.str = [9 x i8] c"multtest\00"
define void @multtest() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca [1 x i32]
%4 = alloca [1 x i32]
%5 = alloca [1 x i32]
%6 = alloca [1 x i32]
%7 = alloca [1 x i32]
%8 = alloca [1 x i32]
%9 = alloca [1 x i32]
%10 = alloca [1 x i32]
%11 = alloca [2 x i32]
%12 = alloca [6 x i32]
%13 = alloca [12 x i32]
%14 = alloca [24 x i32]
%15 = alloca [12 x i32]
%16 = alloca [24 x i32]
%17 = alloca [2 x i32]
%18 = alloca [4 x i32]
%19 = alloca [4 x i32]
%20 = alloca [1 x i32]
%21 = alloca [2 x i32]
%22 = alloca [12 x i32]
%23 = alloca [24 x i32]
store i32 1, i32* %1
store i32 1, i32* %2
%24 = bitcast [1 x i32]* %3 to i8*
%25 = bitcast [1 x i32]* %4 to i8*
%26 = bitcast [1 x i32]* %5 to i8*
%27 = bitcast [1 x i32]* %6 to i8*
%28 = bitcast [1 x i32]* %7 to i8*
%29 = bitcast [1 x i32]* %8 to i8*
%30 = bitcast [1 x i32]* %9 to i8*
%31 = bitcast [1 x i32]* %10 to i8*
%32 = bitcast [2 x i32]* %11 to i8*
%33 = bitcast [6 x i32]* %12 to i8*
%34 = bitcast [12 x i32]* %13 to i8*
%35 = bitcast i8* %34 to <{ i32, i32, i32, [9 x i32] }>*
%36 = getelementptr inbounds <{ i32, i32, i32, [9 x i32] }>, <{ i32, i32, i32, [9 x i32] }>* %35, i32 0, i32 0
store i32 17473, i32* %36
%37 = getelementptr inbounds <{ i32, i32, i32, [9 x i32] }>, <{ i32, i32, i32, [9 x i32] }>* %35, i32 0, i32 2
store i32 65536, i32* %37
%38 = bitcast [24 x i32]* %14 to i8*
%39 = bitcast i8* %38 to <{ i32, i32, i32, i32, i32, i32, [18 x i32] }>*
%40 = getelementptr inbounds <{ i32, i32, i32, i32, i32, i32, [18 x i32] }>, <{ i32, i32, i32, i32, i32, i32, [18 x i32] }>* %39, i32 0, i32 0
store i32 269488129, i32* %40
%41 = getelementptr inbounds <{ i32, i32, i32, i32, i32, i32, [18 x i32] }>, <{ i32, i32, i32, i32, i32, i32, [18 x i32] }>* %39, i32 0, i32 5
store i32 1, i32* %41
%42 = bitcast [12 x i32]* %15 to i8*
%43 = bitcast i8* %42 to [12 x i32]*
%44 = getelementptr inbounds [12 x i32], [12 x i32]* %43, i32 0, i32 0
store i32 352342101, i32* %44
%45 = getelementptr inbounds [12 x i32], [12 x i32]* %43, i32 0, i32 1
store i32 340804628, i32* %45
%46 = getelementptr inbounds [12 x i32], [12 x i32]* %43, i32 0, i32 2
store i32 1, i32* %46
%47 = getelementptr inbounds [12 x i32], [12 x i32]* %43, i32 0, i32 7
store i32 1, i32* %47
%48 = getelementptr inbounds [12 x i32], [12 x i32]* %43, i32 0, i32 11
store i32 1073741824, i32* %48
%49 = bitcast [24 x i32]* %16 to i8*
%50 = bitcast [2 x i32]* %17 to i8*
%51 = getelementptr inbounds [4 x i32], [4 x i32]* %18, i64 0, i64 0
%52 = call i32 @initZero(i32 4, i32* %51)
%53 = getelementptr inbounds [4 x i32], [4 x i32]* %19, i64 0, i64 0
%54 = call i32 @initZero(i32 4, i32* %53)
%55 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%56 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%57 = getelementptr inbounds [4 x i32], [4 x i32]* %18, i64 0, i64 0
%58 = call i32 @f2m_mult(i32 2, i32* %55, i32* %56, i32* %57)
%59 = getelementptr inbounds [2 x i32], [2 x i32]* %17, i64 0, i64 0
%60 = getelementptr inbounds [4 x i32], [4 x i32]* %19, i64 0, i64 0
%61 = call i32 @f2m_square(i32 2, i32* %59, i32* %60)
%62 = load i32, i32* %2
%63 = add nsw i32 %62, 1
store i32 %63, i32* %2
%64 = getelementptr inbounds [4 x i32], [4 x i32]* %18, i64 0, i64 0
%65 = getelementptr inbounds [4 x i32], [4 x i32]* %19, i64 0, i64 0
%66 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 %62, i32 4, i32* %64, i32* %65)
%67 = bitcast [1 x i32]* %20 to i8*
%68 = bitcast [2 x i32]* %21 to i8*
%69 = getelementptr inbounds [12 x i32], [12 x i32]* %22, i64 0, i64 0
%70 = call i32 @initZero(i32 12, i32* %69)
%71 = getelementptr inbounds [24 x i32], [24 x i32]* %23, i64 0, i64 0
%72 = call i32 @initZero(i32 24, i32* %71)
%73 = load i32, i32* %1
%74 = getelementptr inbounds [1 x i32], [1 x i32]* %3, i64 0, i64 0
%75 = getelementptr inbounds [1 x i32], [1 x i32]* %3, i64 0, i64 0
%76 = getelementptr inbounds [1 x i32], [1 x i32]* %20, i64 0, i64 0
%77 = call i32 @f2m_mult(i32 %73, i32* %74, i32* %75, i32* %76)
%78 = load i32, i32* %2
%79 = add nsw i32 %78, 1
store i32 %79, i32* %2
%80 = load i32, i32* %1
%81 = getelementptr inbounds [1 x i32], [1 x i32]* %3, i64 0, i64 0
%82 = getelementptr inbounds [1 x i32], [1 x i32]* %20, i64 0, i64 0
%83 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 %78, i32 %80, i32* %81, i32* %82)
%84 = load i32, i32* %1
%85 = getelementptr inbounds [1 x i32], [1 x i32]* %20, i64 0, i64 0
%86 = call i32 @initZero(i32 %84, i32* %85)
%87 = load i32, i32* %1
%88 = getelementptr inbounds [1 x i32], [1 x i32]* %4, i64 0, i64 0
%89 = getelementptr inbounds [1 x i32], [1 x i32]* %5, i64 0, i64 0
%90 = getelementptr inbounds [1 x i32], [1 x i32]* %20, i64 0, i64 0
%91 = call i32 @f2m_mult(i32 %87, i32* %88, i32* %89, i32* %90)
%92 = load i32, i32* %2
%93 = add nsw i32 %92, 1
store i32 %93, i32* %2
%94 = load i32, i32* %1
%95 = getelementptr inbounds [1 x i32], [1 x i32]* %5, i64 0, i64 0
%96 = getelementptr inbounds [1 x i32], [1 x i32]* %20, i64 0, i64 0
%97 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 %92, i32 %94, i32* %95, i32* %96)
%98 = load i32, i32* %1
%99 = getelementptr inbounds [1 x i32], [1 x i32]* %20, i64 0, i64 0
%100 = call i32 @initZero(i32 %98, i32* %99)
%101 = load i32, i32* %1
%102 = getelementptr inbounds [1 x i32], [1 x i32]* %4, i64 0, i64 0
%103 = getelementptr inbounds [1 x i32], [1 x i32]* %6, i64 0, i64 0
%104 = getelementptr inbounds [1 x i32], [1 x i32]* %20, i64 0, i64 0
%105 = call i32 @f2m_mult(i32 %101, i32* %102, i32* %103, i32* %104)
%106 = load i32, i32* %2
%107 = add nsw i32 %106, 1
store i32 %107, i32* %2
%108 = load i32, i32* %1
%109 = getelementptr inbounds [1 x i32], [1 x i32]* %6, i64 0, i64 0
%110 = getelementptr inbounds [1 x i32], [1 x i32]* %20, i64 0, i64 0
%111 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 %106, i32 %108, i32* %109, i32* %110)
%112 = load i32, i32* %1
%113 = getelementptr inbounds [1 x i32], [1 x i32]* %20, i64 0, i64 0
%114 = call i32 @initZero(i32 %112, i32* %113)
%115 = load i32, i32* %1
%116 = getelementptr inbounds [1 x i32], [1 x i32]* %5, i64 0, i64 0
%117 = getelementptr inbounds [1 x i32], [1 x i32]* %6, i64 0, i64 0
%118 = getelementptr inbounds [1 x i32], [1 x i32]* %20, i64 0, i64 0
%119 = call i32 @f2m_mult(i32 %115, i32* %116, i32* %117, i32* %118)
%120 = load i32, i32* %2
%121 = add nsw i32 %120, 1
store i32 %121, i32* %2
%122 = load i32, i32* %1
%123 = getelementptr inbounds [1 x i32], [1 x i32]* %7, i64 0, i64 0
%124 = getelementptr inbounds [1 x i32], [1 x i32]* %20, i64 0, i64 0
%125 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 %120, i32 %122, i32* %123, i32* %124)
%126 = load i32, i32* %1
%127 = getelementptr inbounds [1 x i32], [1 x i32]* %20, i64 0, i64 0
%128 = call i32 @initZero(i32 %126, i32* %127)
%129 = load i32, i32* %1
%130 = getelementptr inbounds [1 x i32], [1 x i32]* %9, i64 0, i64 0
%131 = getelementptr inbounds [1 x i32], [1 x i32]* %10, i64 0, i64 0
%132 = getelementptr inbounds [2 x i32], [2 x i32]* %21, i64 0, i64 0
%133 = call i32 @f2m_mult(i32 %129, i32* %130, i32* %131, i32* %132)
%134 = load i32, i32* %2
%135 = add nsw i32 %134, 1
store i32 %135, i32* %2
%136 = getelementptr inbounds [2 x i32], [2 x i32]* %11, i64 0, i64 0
%137 = getelementptr inbounds [2 x i32], [2 x i32]* %21, i64 0, i64 0
%138 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 %134, i32 2, i32* %136, i32* %137)
%139 = load i32, i32* %1
%140 = getelementptr inbounds [2 x i32], [2 x i32]* %21, i64 0, i64 0
%141 = call i32 @initZero(i32 %139, i32* %140)
%142 = getelementptr inbounds [6 x i32], [6 x i32]* %12, i64 0, i64 0
%143 = getelementptr inbounds [6 x i32], [6 x i32]* %12, i64 0, i64 0
%144 = getelementptr inbounds [12 x i32], [12 x i32]* %22, i64 0, i64 0
%145 = call i32 @f2m_mult(i32 6, i32* %142, i32* %143, i32* %144)
%146 = load i32, i32* %2
%147 = add nsw i32 %146, 1
store i32 %147, i32* %2
%148 = getelementptr inbounds [12 x i32], [12 x i32]* %13, i64 0, i64 0
%149 = getelementptr inbounds [12 x i32], [12 x i32]* %22, i64 0, i64 0
%150 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 %146, i32 12, i32* %148, i32* %149)
%151 = getelementptr inbounds [12 x i32], [12 x i32]* %22, i64 0, i64 0
%152 = call i32 @initZero(i32 12, i32* %151)
%153 = getelementptr inbounds [12 x i32], [12 x i32]* %13, i64 0, i64 0
%154 = getelementptr inbounds [12 x i32], [12 x i32]* %13, i64 0, i64 0
%155 = getelementptr inbounds [24 x i32], [24 x i32]* %23, i64 0, i64 0
%156 = call i32 @f2m_mult(i32 12, i32* %153, i32* %154, i32* %155)
%157 = load i32, i32* %2
%158 = add nsw i32 %157, 1
store i32 %158, i32* %2
%159 = getelementptr inbounds [24 x i32], [24 x i32]* %14, i64 0, i64 0
%160 = getelementptr inbounds [24 x i32], [24 x i32]* %23, i64 0, i64 0
%161 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 %157, i32 24, i32* %159, i32* %160)
%162 = getelementptr inbounds [24 x i32], [24 x i32]* %23, i64 0, i64 0
%163 = call i32 @initZero(i32 24, i32* %162)
%164 = getelementptr inbounds [12 x i32], [12 x i32]* %15, i64 0, i64 0
%165 = getelementptr inbounds [12 x i32], [12 x i32]* %15, i64 0, i64 0
%166 = getelementptr inbounds [24 x i32], [24 x i32]* %23, i64 0, i64 0
%167 = call i32 @f2m_mult(i32 12, i32* %164, i32* %165, i32* %166)
%168 = load i32, i32* %2
%169 = add nsw i32 %168, 1
store i32 %169, i32* %2
%170 = getelementptr inbounds [24 x i32], [24 x i32]* %16, i64 0, i64 0
%171 = getelementptr inbounds [24 x i32], [24 x i32]* %23, i64 0, i64 0
%172 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 %168, i32 24, i32* %170, i32* %171)
%173 = getelementptr inbounds [24 x i32], [24 x i32]* %23, i64 0, i64 0
%174 = call i32 @initZero(i32 24, i32* %173)
ret void
}

LLVM IR (-O2):
@__const.multtest.j = [6 x i32] [i32 169, i32 256, i32 0, i32 0, i32 0, i32 0]
@__const.multtest.n = [24 x i32] [i32 285217041, i32 17891328, i32 269484304, i32 17830144, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 268435456]
@.str = [9 x i8] c"multtest\00"
define void @multtest() {
%1 = alloca [1 x i32]
%2 = alloca [1 x i32]
%3 = alloca [1 x i32]
%4 = alloca [1 x i32]
%5 = alloca [1 x i32]
%6 = alloca [1 x i32]
%7 = alloca [1 x i32]
%8 = alloca i64
%9 = alloca [6 x i32]
%10 = alloca [12 x i32]
%11 = alloca [24 x i32]
%12 = alloca [12 x i32]
%13 = alloca [24 x i32]
%14 = alloca i64
%15 = alloca [4 x i32]
%16 = alloca [4 x i32]
%17 = alloca [1 x i32]
%18 = alloca i64
%19 = alloca [12 x i32]
%20 = alloca [24 x i32]
%21 = bitcast [1 x i32]* %1 to i8*
%22 = getelementptr inbounds [1 x i32], [1 x i32]* %1, i64 0, i64 0
store i32 0, i32* %22
%23 = bitcast [1 x i32]* %2 to i8*
%24 = getelementptr inbounds [1 x i32], [1 x i32]* %2, i64 0, i64 0
store i32 1, i32* %24
%25 = bitcast [1 x i32]* %3 to i8*
%26 = getelementptr inbounds [1 x i32], [1 x i32]* %3, i64 0, i64 0
store i32 2, i32* %26
%27 = bitcast [1 x i32]* %4 to i8*
%28 = getelementptr inbounds [1 x i32], [1 x i32]* %4, i64 0, i64 0
store i32 3, i32* %28
%29 = bitcast [1 x i32]* %5 to i8*
%30 = getelementptr inbounds [1 x i32], [1 x i32]* %5, i64 0, i64 0
store i32 6, i32* %30
%31 = bitcast [1 x i32]* %6 to i8*
%32 = getelementptr inbounds [1 x i32], [1 x i32]* %6, i64 0, i64 0
store i32 -2147483648, i32* %32
%33 = bitcast [1 x i32]* %7 to i8*
%34 = getelementptr inbounds [1 x i32], [1 x i32]* %7, i64 0, i64 0
store i32 2, i32* %34
%35 = bitcast i64* %8 to i8*
store i64 4294967296, i64* %8
%36 = bitcast [6 x i32]* %9 to i8*
%37 = bitcast [12 x i32]* %10 to i8*
%38 = getelementptr inbounds [12 x i32], [12 x i32]* %10, i64 0, i64 0
store i32 17473, i32* %38
%39 = getelementptr inbounds [12 x i32], [12 x i32]* %10, i64 0, i64 2
store i32 65536, i32* %39
%40 = bitcast [24 x i32]* %11 to i8*
%41 = getelementptr inbounds [24 x i32], [24 x i32]* %11, i64 0, i64 0
store i32 269488129, i32* %41
%42 = getelementptr inbounds [24 x i32], [24 x i32]* %11, i64 0, i64 5
store i32 1, i32* %42
%43 = bitcast [12 x i32]* %12 to i8*
%44 = getelementptr inbounds [12 x i32], [12 x i32]* %12, i64 0, i64 0
store i32 352342101, i32* %44
%45 = getelementptr inbounds [12 x i32], [12 x i32]* %12, i64 0, i64 1
store i32 340804628, i32* %45
%46 = getelementptr inbounds [12 x i32], [12 x i32]* %12, i64 0, i64 2
store i32 1, i32* %46
%47 = getelementptr inbounds [12 x i32], [12 x i32]* %12, i64 0, i64 7
store i32 1, i32* %47
%48 = getelementptr inbounds [12 x i32], [12 x i32]* %12, i64 0, i64 11
store i32 1073741824, i32* %48
%49 = bitcast [24 x i32]* %13 to i8*
%50 = bitcast i64* %14 to i8*
store i64 -1152921436155805681, i64* %14
%51 = bitcast [4 x i32]* %15 to i8*
%52 = bitcast [4 x i32]* %16 to i8*
%53 = getelementptr inbounds [4 x i32], [4 x i32]* %15, i64 0, i64 0
%54 = call i32 @initZero(i32 4, i32* %53)
%55 = getelementptr inbounds [4 x i32], [4 x i32]* %16, i64 0, i64 0
%56 = call i32 @initZero(i32 4, i32* %55)
%57 = bitcast i64* %14 to i32*
%58 = call i32 @f2m_mult(i32 2, i32* %57, i32* %57, i32* %53)
%59 = call i32 @f2m_square(i32 2, i32* %57, i32* %55)
%60 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 1, i32 4, i32* %53, i32* %55)
%61 = bitcast [1 x i32]* %17 to i8*
%62 = getelementptr inbounds [1 x i32], [1 x i32]* %17, i64 0, i64 0
store i32 0, i32* %62
%63 = bitcast i64* %18 to i8*
store i64 0, i64* %18
%64 = bitcast [12 x i32]* %19 to i8*
%65 = getelementptr inbounds [12 x i32], [12 x i32]* %19, i64 0, i64 0
%66 = call i32 @initZero(i32 12, i32* %65)
%67 = bitcast [24 x i32]* %20 to i8*
%68 = getelementptr inbounds [24 x i32], [24 x i32]* %20, i64 0, i64 0
%69 = call i32 @initZero(i32 24, i32* %68)
%70 = call i32 @f2m_mult(i32 1, i32* %22, i32* %22, i32* %62)
%71 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 2, i32 1, i32* %22, i32* %62)
%72 = call i32 @initZero(i32 1, i32* %62)
%73 = call i32 @f2m_mult(i32 1, i32* %24, i32* %26, i32* %62)
%74 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 3, i32 1, i32* %26, i32* %62)
%75 = call i32 @initZero(i32 1, i32* %62)
%76 = call i32 @f2m_mult(i32 1, i32* %24, i32* %28, i32* %62)
%77 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 4, i32 1, i32* %28, i32* %62)
%78 = call i32 @initZero(i32 1, i32* %62)
%79 = call i32 @f2m_mult(i32 1, i32* %26, i32* %28, i32* %62)
%80 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 5, i32 1, i32* %30, i32* %62)
%81 = call i32 @initZero(i32 1, i32* %62)
%82 = bitcast i64* %18 to i32*
%83 = call i32 @f2m_mult(i32 1, i32* %32, i32* %34, i32* %82)
%84 = bitcast i64* %8 to i32*
%85 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 6, i32 2, i32* %84, i32* %82)
%86 = call i32 @initZero(i32 1, i32* %82)
%87 = getelementptr inbounds [6 x i32], [6 x i32]* %9, i64 0, i64 0
%88 = call i32 @f2m_mult(i32 6, i32* %87, i32* %87, i32* %65)
%89 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 7, i32 12, i32* %38, i32* %65)
%90 = call i32 @initZero(i32 12, i32* %65)
%91 = call i32 @f2m_mult(i32 12, i32* %38, i32* %38, i32* %68)
%92 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 8, i32 24, i32* %41, i32* %68)
%93 = call i32 @initZero(i32 24, i32* %68)
%94 = call i32 @f2m_mult(i32 12, i32* %44, i32* %44, i32* %68)
%95 = getelementptr inbounds [24 x i32], [24 x i32]* %13, i64 0, i64 0
%96 = call i32 @testeqprint(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32 9, i32 24, i32* %95, i32* %68)
%97 = call i32 @initZero(i32 24, i32* %68)
ret void
}