#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 */

/* Variables and functions */
int /*<<< orphan*/ fn_dirFHaarWT2p2_I16(short *, short *, int, int);
int /*<<< orphan*/ fn_dirFHaarWT2p2oneStage_I16(short *, short *, int);
int /*<<< orphan*/ fn_invFHaarWT2p2_I16(short *, short *, int, int);
int /*<<< orphan*/ fn_invFHaarWT2p2oneStage_I16(short *, short *, int);
int log(int);
int /*<<< orphan*/ printf(char *, ...);
int rand();
int main() {
  int i;
  short ai_data[8] = {16, 8, 12, 16, 18, 14, 4, 8};
  short ai_k[8];
  int i_step = (int)(log(8) / log(2));
  short ai_Rdata[32];
  short ai_Rk[32];
  int i_Rstep = (int)(log(32) / log(2));
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" determining test ");
  printf("\n");
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" one stage ");
  printf("\n");
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" input: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_data[i]);
    printf("\n");
  }
  fn_dirFHaarWT2p2oneStage_I16(ai_k, ai_data, 8);
  printf(" output: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_k[i]);
    printf("\n");
  }
  fn_invFHaarWT2p2oneStage_I16(ai_data, ai_k, 8);
  printf(" input, again: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_data[i]);
    printf("\n");
  }
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" one level ");
  printf("\n");
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" input: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_data[i]);
    printf("\n");
  }
  fn_dirFHaarWT2p2_I16(ai_k, ai_data, 8, 1);
  printf(" output: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_k[i]);
    printf("\n");
  }
  fn_invFHaarWT2p2_I16(ai_data, ai_k, 8, 1);
  printf(" input, again: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_data[i]);
    printf("\n");
  }
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" full level ");
  printf("\n");
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" input: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_data[i]);
    printf("\n");
  }
  printf("\n");
  printf("i_step = %d ", i_step);
  printf("\n");
  printf("\n");
  fn_dirFHaarWT2p2_I16(ai_k, ai_data, 8, i_step);
  for (i = 0; i < 4; i++) {
    printf(" W3: %d ", ai_k[i]);
    printf("\n");
  }
  for (i = 4; i < 6; i++) {
    printf(" W2: %d ", ai_k[i]);
    printf("\n");
  }
  printf(" W1: %d ", ai_k[6]);
  printf("\n");
  printf(" W0: %d ", ai_k[7]);
  printf("\n");
  fn_invFHaarWT2p2_I16(ai_data, ai_k, 8, i_step);
  printf(" input, again: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_data[i]);
    printf("\n");
  }
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" random test ");
  printf("\n");
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" input random: ");
  printf("\n");
  for (i = 0; i < 32; i++) {
    ai_Rdata[i] = (rand() % 32) + 1;
    printf("%d ", ai_Rdata[i]);
    printf("\n");
  }
  fn_dirFHaarWT2p2_I16(ai_Rk, ai_Rdata, 32, i_Rstep);
  printf(" output random: ");
  printf("\n");
  for (i = 0; i < 32; i++) {
    printf("%d ", ai_Rk[i]);
    printf("\n");
  }
  fn_invFHaarWT2p2_I16(ai_Rdata, ai_Rk, 32, i_Rstep);
  printf(" input random, again: ");
  printf("\n");
  for (i = 0; i < 32; i++) {
    printf("%d ", ai_Rdata[i]);
    printf("\n");
  }
  printf(" Well? Almost (!) The same? ))) ");
  printf("\n");
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" random semi-full test ");
  printf("\n");
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" input random: ");
  printf("\n");
  for (i = 0; i < 32; i++) {
    ai_Rdata[i] = (rand() % 32) + 1;
    printf("%d ", ai_Rdata[i]);
    printf("\n");
  }
  fn_dirFHaarWT2p2_I16(ai_Rk, ai_Rdata, 32, 3);
  printf(" output random: ");
  printf("\n");
  for (i = 0; i < 32; i++) {
    printf("%d ", ai_Rk[i]);
    printf("\n");
  }
  fn_invFHaarWT2p2_I16(ai_Rdata, ai_Rk, 32, 3);
  printf(" input random, again: ");
  printf("\n");
  for (i = 0; i < 32; i++) {
    printf("%d ", ai_Rdata[i]);
    printf("\n");
  }
  printf(" Well? Almost (!) The same? ))) ");
  printf("\n");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
movl   $0x0,-0x4(%rbp)
mov    0xe77(%rip),%rax
mov    %rax,-0x20(%rbp)
mov    0xe74(%rip),%rax
mov    %rax,-0x18(%rbp)
mov    $0x8,%edi
call   1080 <log@plt>
mov    %eax,-0xcc(%rbp)
mov    $0x2,%edi
call   1080 <log@plt>
mov    %eax,%ecx
mov    -0xcc(%rbp),%eax
cltd
idiv   %ecx
mov    %eax,-0x34(%rbp)
mov    $0x20,%edi
call   1080 <log@plt>
mov    %eax,-0xc8(%rbp)
mov    $0x2,%edi
call   1080 <log@plt>
mov    %eax,%ecx
mov    -0xc8(%rbp),%eax
cltd
idiv   %ecx
mov    %eax,-0xc4(%rbp)
lea    0xe1e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xe52(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xe46(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xe36(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xde6(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xe1a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xe21(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xdfe(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xdae(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xde2(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xdf5(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xdc6(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    12d7 <main+0x167>
movslq -0x8(%rbp),%rax
movswl -0x20(%rbp,%rax,2),%esi
lea    0xe28(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xd90(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    129a <main+0x12a>
lea    -0x30(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x8,%edx
call   1030 <fn_dirFHaarWT2p2oneStage_I16@plt>
lea    0xd8c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xd54(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    1349 <main+0x1d9>
movslq -0x8(%rbp),%rax
movswl -0x30(%rbp,%rax,2),%esi
lea    0xdb6(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xd1e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    130c <main+0x19c>
lea    -0x20(%rbp),%rdi
lea    -0x30(%rbp),%rsi
mov    $0x8,%edx
call   1050 <fn_invFHaarWT2p2oneStage_I16@plt>
lea    0xd24(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xce2(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    13bb <main+0x24b>
movslq -0x8(%rbp),%rax
movswl -0x20(%rbp,%rax,2),%esi
lea    0xd44(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xcac(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    137e <main+0x20e>
lea    0xc4e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xc82(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xcb8(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xc66(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xc16(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xc4a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xc5d(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xc2e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    146f <main+0x2ff>
movslq -0x8(%rbp),%rax
movswl -0x20(%rbp,%rax,2),%esi
lea    0xc90(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xbf8(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1432 <main+0x2c2>
lea    -0x30(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    $0x8,%edx
mov    $0x1,%ecx
call   1060 <fn_dirFHaarWT2p2_I16@plt>
lea    0xbef(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xbb7(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    14e6 <main+0x376>
movslq -0x8(%rbp),%rax
movswl -0x30(%rbp,%rax,2),%esi
lea    0xc19(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xb81(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    14a9 <main+0x339>
lea    -0x20(%rbp),%rdi
lea    -0x30(%rbp),%rsi
mov    $0x8,%edx
mov    $0x1,%ecx
call   1070 <fn_invFHaarWT2p2_I16@plt>
lea    0xb82(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xb40(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    155d <main+0x3ed>
movslq -0x8(%rbp),%rax
movswl -0x20(%rbp,%rax,2),%esi
lea    0xba2(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xb0a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1520 <main+0x3b0>
lea    0xaac(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xae0(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xb22(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xac4(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xa74(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xaa8(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xabb(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xa8c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    1611 <main+0x4a1>
movslq -0x8(%rbp),%rax
movswl -0x20(%rbp,%rax,2),%esi
lea    0xaee(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xa56(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    15d4 <main+0x464>
lea    0xa3a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x34(%rbp),%esi
lea    0xa86(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xa1b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xa0d(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    -0x30(%rbp),%rdi
lea    -0x20(%rbp),%rsi
mov    -0x34(%rbp),%ecx
mov    $0x8,%edx
call   1060 <fn_dirFHaarWT2p2_I16@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x4,-0x8(%rbp)
jge    16a5 <main+0x535>
movslq -0x8(%rbp),%rax
movswl -0x30(%rbp,%rax,2),%esi
lea    0xa3a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x9c2(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1668 <main+0x4f8>
movl   $0x4,-0x8(%rbp)
cmpl   $0x6,-0x8(%rbp)
jge    16e9 <main+0x579>
movslq -0x8(%rbp),%rax
movswl -0x30(%rbp,%rax,2),%esi
lea    0x9ff(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x97e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    16ac <main+0x53c>
movswl -0x24(%rbp),%esi
lea    0x9da(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x950(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movswl -0x22(%rbp),%esi
lea    0x9c3(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x930(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    -0x20(%rbp),%rdi
lea    -0x30(%rbp),%rsi
mov    -0x34(%rbp),%ecx
mov    $0x8,%edx
call   1070 <fn_invFHaarWT2p2_I16@plt>
lea    0x941(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x8ff(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    179e <main+0x62e>
movslq -0x8(%rbp),%rax
movswl -0x20(%rbp,%rax,2),%esi
lea    0x961(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x8c9(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1761 <main+0x5f1>
lea    0x86b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x89f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x91f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x883(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x833(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x867(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x8f5(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x84b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x20,-0x8(%rbp)
jge    1870 <main+0x700>
mov    $0x0,%al
call   1090 <rand@plt>
mov    $0x20,%ecx
cltd
idiv   %ecx
add    $0x1,%edx
mov    %dx,%cx
movslq -0x8(%rbp),%rax
mov    %cx,-0x80(%rbp,%rax,2)
movslq -0x8(%rbp),%rax
movswl -0x80(%rbp,%rax,2),%esi
lea    0x88f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x7f7(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1815 <main+0x6a5>
lea    -0xc0(%rbp),%rdi
lea    -0x80(%rbp),%rsi
mov    -0xc4(%rbp),%ecx
mov    $0x20,%edx
call   1060 <fn_dirFHaarWT2p2_I16@plt>
lea    0x86c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x7b2(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x20,-0x8(%rbp)
jge    18ee <main+0x77e>
movslq -0x8(%rbp),%rax
movswl -0xc0(%rbp,%rax,2),%esi
ff
lea    0x811(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x779(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    18ae <main+0x73e>
lea    -0x80(%rbp),%rdi
lea    -0xc0(%rbp),%rsi
mov    -0xc4(%rbp),%ecx
mov    $0x20,%edx
call   1070 <fn_invFHaarWT2p2_I16@plt>
lea    0x7ff(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x734(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x20,-0x8(%rbp)
jge    1969 <main+0x7f9>
movslq -0x8(%rbp),%rax
movswl -0x80(%rbp,%rax,2),%esi
lea    0x796(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x6fe(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    192c <main+0x7bc>
lea    0x7b6(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x6d4(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x684(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x6b8(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x79f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x69c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x64c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x680(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x70e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x664(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x20,-0x8(%rbp)
jge    1a57 <main+0x8e7>
mov    $0x0,%al
call   1090 <rand@plt>
mov    $0x20,%ecx
cltd
idiv   %ecx
add    $0x1,%edx
mov    %dx,%cx
movslq -0x8(%rbp),%rax
mov    %cx,-0x80(%rbp,%rax,2)
movslq -0x8(%rbp),%rax
movswl -0x80(%rbp,%rax,2),%esi
lea    0x6a8(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x610(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    19fc <main+0x88c>
lea    -0xc0(%rbp),%rdi
lea    -0x80(%rbp),%rsi
mov    $0x20,%edx
mov    $0x3,%ecx
call   1060 <fn_dirFHaarWT2p2_I16@plt>
lea    0x686(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x5cc(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x20,-0x8(%rbp)
jge    1ad4 <main+0x964>
movslq -0x8(%rbp),%rax
movswl -0xc0(%rbp,%rax,2),%esi
ff
lea    0x62b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x593(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1a94 <main+0x924>
lea    -0x80(%rbp),%rdi
lea    -0xc0(%rbp),%rsi
mov    $0x20,%edx
mov    $0x3,%ecx
call   1070 <fn_invFHaarWT2p2_I16@plt>
lea    0x61a(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x54f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x20,-0x8(%rbp)
jge    1b4e <main+0x9de>
movslq -0x8(%rbp),%rax
movswl -0x80(%rbp,%rax,2),%esi
lea    0x5b1(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x519(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1b11 <main+0x9a1>
lea    0x5d1(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x4ef(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
xor    %eax,%eax
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xb8,%rsp
movaps 0xe68(%rip),%xmm0
movaps %xmm0,(%rsp)
mov    $0x8,%edi
call   1090 <log@plt>
mov    %eax,%r14d
mov    $0x2,%edi
call   1090 <log@plt>
mov    %eax,%ebx
mov    $0x20,%edi
call   1090 <log@plt>
mov    %eax,0x2c(%rsp)
mov    $0x2,%edi
call   1090 <log@plt>
mov    %eax,0x28(%rsp)
lea    0xe38(%rip),%r12
mov    %r12,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xe5f(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r12,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xe46(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r12,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xe26(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xe77(%rip),%rbp
mov    %rbp,%rdi
mov    $0x10,%esi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbp,%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbp,%rdi
mov    $0xc,%esi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbp,%rdi
mov    $0x10,%esi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbp,%rdi
mov    $0x12,%esi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbp,%rdi
mov    $0xe,%esi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbp,%rdi
mov    $0x4,%esi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbp,%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14d,%eax
cltd
idiv   %ebx
mov    %eax,%r15d
lea    0x10(%rsp),%r13
mov    %rsp,%r14
mov    %r13,%rdi
mov    %r14,%rsi
mov    $0x8,%edx
call   1040 <fn_dirFHaarWT2p2oneStage_I16@plt>
lea    0xd27(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x10(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x12(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x14(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x16(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x18(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x1a(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x1c(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x1e(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
mov    %r13,%rsi
mov    $0x8,%edx
call   1060 <fn_invFHaarWT2p2oneStage_I16@plt>
lea    0xc41(%rip),%rbx
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl (%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x2(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x4(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x6(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x8(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xa(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xc(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xe(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r12,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xb5b(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r12,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xb0c(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl (%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x2(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x4(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x6(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x8(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xa(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xc(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xe(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r13,%rdi
mov    %r14,%rsi
mov    $0x8,%edx
mov    $0x1,%ecx
call   1070 <fn_dirFHaarWT2p2_I16@plt>
lea    0xa21(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x10(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x12(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x14(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x16(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x18(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x1a(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x1c(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x1e(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
mov    %r13,%rsi
mov    $0x8,%edx
mov    $0x1,%ecx
call   1080 <fn_invFHaarWT2p2_I16@plt>
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl (%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x2(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x4(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x6(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x8(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xa(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xc(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xe(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r12,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x863(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r12,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x808(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl (%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x2(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x4(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x6(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x8(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xa(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xc(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xe(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x75b(%rip),%rdi
mov    %r15d,%esi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r13,%rdi
mov    %r14,%rsi
mov    $0x8,%edx
mov    %r15d,%ecx
call   1070 <fn_dirFHaarWT2p2_I16@plt>
movswl 0x10(%rsp),%esi
lea    0x72b(%rip),%rbx
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x12(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x14(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x16(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x18(%rsp),%esi
lea    0x6c9(%rip),%rbx
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x1a(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x1c(%rsp),%esi
lea    0x699(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x1e(%rsp),%esi
lea    0x685(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
mov    %r13,%rsi
mov    $0x8,%edx
mov    %r15d,%ecx
call   1080 <fn_invFHaarWT2p2_I16@plt>
lea    0x609(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl (%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x2(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x4(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x6(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0x8(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xa(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xc(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
movswl 0xe(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r12,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x570(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r12,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x552(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %ebx,%ebx
nopl   (%rax)
xor    %eax,%eax
call   10a0 <rand@plt>
lea    0x1f(%rax),%ecx
test   %eax,%eax
cmovns %eax,%ecx
and    $0xffe0,%ecx
neg    %ecx
add    %ecx,%eax
add    $0x1,%eax
mov    %ax,0x30(%rsp,%rbx,2)
movswl %ax,%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x1,%rbx
cmp    $0x20,%rbx
jne    1bb0 <main+0xa30>
mov    0x2c(%rsp),%eax
cltd
idivl  0x28(%rsp)
mov    %eax,%r14d
lea    0x70(%rsp),%rdi
lea    0x30(%rsp),%rsi
mov    $0x20,%edx
mov    %eax,%ecx
call   1070 <fn_dirFHaarWT2p2_I16@plt>
lea    0x4e1(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x4a7(%rip),%rbp
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nop
movswl 0x70(%rsp,%rbx,2),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x1,%rbx
cmp    $0x20,%rbx
jne    1c40 <main+0xac0>
lea    0x30(%rsp),%rdi
lea    0x70(%rsp),%rsi
mov    $0x20,%edx
mov    %r14d,%ecx
call   1080 <fn_invFHaarWT2p2_I16@plt>
lea    0x48c(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x441(%rip),%rbx
xor    %ebp,%ebp
nopl   0x0(%rax,%rax,1)
movswl 0x30(%rsp,%rbp,2),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x1,%rbp
cmp    $0x20,%rbp
jne    1ca0 <main+0xb20>
lea    0x45a(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x32e(%rip),%rbx
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x448(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x3c3(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x399(%rip),%rbx
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xor    %eax,%eax
call   10a0 <rand@plt>
lea    0x1f(%rax),%ecx
test   %eax,%eax
cmovns %eax,%ecx
and    $0xffe0,%ecx
neg    %ecx
add    %ecx,%eax
add    $0x1,%eax
mov    %ax,0x30(%rsp,%rbp,2)
movswl %ax,%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x1,%rbp
cmp    $0x20,%rbp
jne    1d50 <main+0xbd0>
lea    0x70(%rsp),%rdi
lea    0x30(%rsp),%rsi
mov    $0x20,%edx
mov    $0x3,%ecx
call   1070 <fn_dirFHaarWT2p2_I16@plt>
lea    0x34a(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x310(%rip),%rbx
xor    %ebp,%ebp
nopl   0x0(%rax)
movswl 0x70(%rsp,%rbp,2),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x1,%rbp
cmp    $0x20,%rbp
jne    1dd0 <main+0xc50>
lea    0x30(%rsp),%rdi
lea    0x70(%rsp),%rsi
mov    $0x20,%edx
mov    $0x3,%ecx
call   1080 <fn_invFHaarWT2p2_I16@plt>
lea    0x2fa(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x2af(%rip),%rbx
xor    %ebp,%ebp
nopl   (%rax)
movswl 0x30(%rsp,%rbp,2),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x1,%rbp
cmp    $0x20,%rbp
jne    1e30 <main+0xcb0>
lea    0x2ca(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
add    $0xb8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@__const.main.ai_data = [8 x i16] [i16 16, i16 8, i16 12, i16 16, i16 18, i16 14, i16 4, i16 8]
@.str = [66 x i8] c"-----------------------------------------------------------------\00"
@.str.1 = [2 x i8] c"\0A\00"
@.str.2 = [19 x i8] c" determining test \00"
@.str.3 = [12 x i8] c" one stage \00"
@.str.4 = [9 x i8] c" input: \00"
@.str.5 = [4 x i8] c"%d \00"
@.str.6 = [10 x i8] c" output: \00"
@.str.7 = [16 x i8] c" input, again: \00"
@.str.8 = [12 x i8] c" one level \00"
@.str.9 = [13 x i8] c" full level \00"
@.str.10 = [13 x i8] c"i_step = %d \00"
@.str.11 = [9 x i8] c" W3: %d \00"
@.str.12 = [9 x i8] c" W2: %d \00"
@.str.13 = [9 x i8] c" W1: %d \00"
@.str.14 = [9 x i8] c" W0: %d \00"
@.str.15 = [14 x i8] c" random test \00"
@.str.16 = [16 x i8] c" input random: \00"
@.str.17 = [17 x i8] c" output random: \00"
@.str.18 = [23 x i8] c" input random, again: \00"
@.str.19 = [33 x i8] c" Well? Almost (!) The same? ))) \00"
@.str.20 = [24 x i8] c" random semi-full test \00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca [8 x i16]
%4 = alloca [8 x i16]
%5 = alloca i32
%6 = alloca [32 x i16]
%7 = alloca [32 x i16]
%8 = alloca i32
store i32 0, i32* %1
%9 = bitcast [8 x i16]* %3 to i8*
%10 = call i32 @log(i32 8)
%11 = call i32 @log(i32 2)
%12 = sdiv i32 %10, %11
store i32 %12, i32* %5
%13 = call i32 @log(i32 32)
%14 = call i32 @log(i32 2)
%15 = sdiv i32 %13, %14
store i32 %15, i32* %8
%16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.2, i64 0, i64 0))
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 0))
%23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0))
%27 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %28
28: ; preds = %39, %0
%29 = load i32, i32* %2
%30 = icmp slt i32 %29, 8
br i1 %30, label %31, label %42
31: ; preds = %28
%32 = load i32, i32* %2
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds [8 x i16], [8 x i16]* %3, i64 0, i64 %33
%35 = load i16, i16* %34
%36 = sext i16 %35 to i32
%37 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %36)
%38 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %39
39: ; preds = %31
%40 = load i32, i32* %2
%41 = add nsw i32 %40, 1
store i32 %41, i32* %2
br label %28
42: ; preds = %28
%43 = getelementptr inbounds [8 x i16], [8 x i16]* %4, i64 0, i64 0
%44 = getelementptr inbounds [8 x i16], [8 x i16]* %3, i64 0, i64 0
%45 = call i32 @fn_dirFHaarWT2p2oneStage_I16(i16* %43, i16* %44, i32 8)
%46 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.6, i64 0, i64 0))
%47 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %48
48: ; preds = %59, %42
%49 = load i32, i32* %2
%50 = icmp slt i32 %49, 8
br i1 %50, label %51, label %62
51: ; preds = %48
%52 = load i32, i32* %2
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [8 x i16], [8 x i16]* %4, i64 0, i64 %53
%55 = load i16, i16* %54
%56 = sext i16 %55 to i32
%57 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %56)
%58 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %59
59: ; preds = %51
%60 = load i32, i32* %2
%61 = add nsw i32 %60, 1
store i32 %61, i32* %2
br label %48
62: ; preds = %48
%63 = getelementptr inbounds [8 x i16], [8 x i16]* %3, i64 0, i64 0
%64 = getelementptr inbounds [8 x i16], [8 x i16]* %4, i64 0, i64 0
%65 = call i32 @fn_invFHaarWT2p2oneStage_I16(i16* %63, i16* %64, i32 8)
%66 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0))
%67 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %68
68: ; preds = %79, %62
%69 = load i32, i32* %2
%70 = icmp slt i32 %69, 8
br i1 %70, label %71, label %82
71: ; preds = %68
%72 = load i32, i32* %2
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds [8 x i16], [8 x i16]* %3, i64 0, i64 %73
%75 = load i16, i16* %74
%76 = sext i16 %75 to i32
%77 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %76)
%78 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %79
79: ; preds = %71
%80 = load i32, i32* %2
%81 = add nsw i32 %80, 1
store i32 %81, i32* %2
br label %68
82: ; preds = %68
%83 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%85 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.8, i64 0, i64 0))
%86 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%87 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%88 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%89 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0))
%90 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %91
91: ; preds = %102, %82
%92 = load i32, i32* %2
%93 = icmp slt i32 %92, 8
br i1 %93, label %94, label %105
94: ; preds = %91
%95 = load i32, i32* %2
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds [8 x i16], [8 x i16]* %3, i64 0, i64 %96
%98 = load i16, i16* %97
%99 = sext i16 %98 to i32
%100 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %99)
%101 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %102
102: ; preds = %94
%103 = load i32, i32* %2
%104 = add nsw i32 %103, 1
store i32 %104, i32* %2
br label %91
105: ; preds = %91
%106 = getelementptr inbounds [8 x i16], [8 x i16]* %4, i64 0, i64 0
%107 = getelementptr inbounds [8 x i16], [8 x i16]* %3, i64 0, i64 0
%108 = call i32 @fn_dirFHaarWT2p2_I16(i16* %106, i16* %107, i32 8, i32 1)
%109 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.6, i64 0, i64 0))
%110 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %111
111: ; preds = %122, %105
%112 = load i32, i32* %2
%113 = icmp slt i32 %112, 8
br i1 %113, label %114, label %125
114: ; preds = %111
%115 = load i32, i32* %2
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds [8 x i16], [8 x i16]* %4, i64 0, i64 %116
%118 = load i16, i16* %117
%119 = sext i16 %118 to i32
%120 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %119)
%121 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %122
122: ; preds = %114
%123 = load i32, i32* %2
%124 = add nsw i32 %123, 1
store i32 %124, i32* %2
br label %111
125: ; preds = %111
%126 = getelementptr inbounds [8 x i16], [8 x i16]* %3, i64 0, i64 0
%127 = getelementptr inbounds [8 x i16], [8 x i16]* %4, i64 0, i64 0
%128 = call i32 @fn_invFHaarWT2p2_I16(i16* %126, i16* %127, i32 8, i32 1)
%129 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0))
%130 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %131
131: ; preds = %142, %125
%132 = load i32, i32* %2
%133 = icmp slt i32 %132, 8
br i1 %133, label %134, label %145
134: ; preds = %131
%135 = load i32, i32* %2
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds [8 x i16], [8 x i16]* %3, i64 0, i64 %136
%138 = load i16, i16* %137
%139 = sext i16 %138 to i32
%140 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %139)
%141 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %142
142: ; preds = %134
%143 = load i32, i32* %2
%144 = add nsw i32 %143, 1
store i32 %144, i32* %2
br label %131
145: ; preds = %131
%146 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%147 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%148 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.9, i64 0, i64 0))
%149 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%150 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%151 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%152 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0))
%153 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %154
154: ; preds = %165, %145
%155 = load i32, i32* %2
%156 = icmp slt i32 %155, 8
br i1 %156, label %157, label %168
157: ; preds = %154
%158 = load i32, i32* %2
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds [8 x i16], [8 x i16]* %3, i64 0, i64 %159
%161 = load i16, i16* %160
%162 = sext i16 %161 to i32
%163 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %162)
%164 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %165
165: ; preds = %157
%166 = load i32, i32* %2
%167 = add nsw i32 %166, 1
store i32 %167, i32* %2
br label %154
168: ; preds = %154
%169 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%170 = load i32, i32* %5
%171 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.10, i64 0, i64 0), i32 %170)
%172 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%173 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%174 = getelementptr inbounds [8 x i16], [8 x i16]* %4, i64 0, i64 0
%175 = getelementptr inbounds [8 x i16], [8 x i16]* %3, i64 0, i64 0
%176 = load i32, i32* %5
%177 = call i32 @fn_dirFHaarWT2p2_I16(i16* %174, i16* %175, i32 8, i32 %176)
store i32 0, i32* %2
br label %178
178: ; preds = %189, %168
%179 = load i32, i32* %2
%180 = icmp slt i32 %179, 4
br i1 %180, label %181, label %192
181: ; preds = %178
%182 = load i32, i32* %2
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds [8 x i16], [8 x i16]* %4, i64 0, i64 %183
%185 = load i16, i16* %184
%186 = sext i16 %185 to i32
%187 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.11, i64 0, i64 0), i32 %186)
%188 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %189
189: ; preds = %181
%190 = load i32, i32* %2
%191 = add nsw i32 %190, 1
store i32 %191, i32* %2
br label %178
192: ; preds = %178
store i32 4, i32* %2
br label %193
193: ; preds = %204, %192
%194 = load i32, i32* %2
%195 = icmp slt i32 %194, 6
br i1 %195, label %196, label %207
196: ; preds = %193
%197 = load i32, i32* %2
%198 = sext i32 %197 to i64
%199 = getelementptr inbounds [8 x i16], [8 x i16]* %4, i64 0, i64 %198
%200 = load i16, i16* %199
%201 = sext i16 %200 to i32
%202 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.12, i64 0, i64 0), i32 %201)
%203 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %204
204: ; preds = %196
%205 = load i32, i32* %2
%206 = add nsw i32 %205, 1
store i32 %206, i32* %2
br label %193
207: ; preds = %193
%208 = getelementptr inbounds [8 x i16], [8 x i16]* %4, i64 0, i64 6
%209 = load i16, i16* %208
%210 = sext i16 %209 to i32
%211 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.13, i64 0, i64 0), i32 %210)
%212 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%213 = getelementptr inbounds [8 x i16], [8 x i16]* %4, i64 0, i64 7
%214 = load i16, i16* %213
%215 = sext i16 %214 to i32
%216 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.14, i64 0, i64 0), i32 %215)
%217 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%218 = getelementptr inbounds [8 x i16], [8 x i16]* %3, i64 0, i64 0
%219 = getelementptr inbounds [8 x i16], [8 x i16]* %4, i64 0, i64 0
%220 = load i32, i32* %5
%221 = call i32 @fn_invFHaarWT2p2_I16(i16* %218, i16* %219, i32 8, i32 %220)
%222 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0))
%223 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %224
224: ; preds = %235, %207
%225 = load i32, i32* %2
%226 = icmp slt i32 %225, 8
br i1 %226, label %227, label %238
227: ; preds = %224
%228 = load i32, i32* %2
%229 = sext i32 %228 to i64
%230 = getelementptr inbounds [8 x i16], [8 x i16]* %3, i64 0, i64 %229
%231 = load i16, i16* %230
%232 = sext i16 %231 to i32
%233 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %232)
%234 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %235
235: ; preds = %227
%236 = load i32, i32* %2
%237 = add nsw i32 %236, 1
store i32 %237, i32* %2
br label %224
238: ; preds = %224
%239 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%240 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%241 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.15, i64 0, i64 0))
%242 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%243 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%244 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%245 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.16, i64 0, i64 0))
%246 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %247
247: ; preds = %265, %238
%248 = load i32, i32* %2
%249 = icmp slt i32 %248, 32
br i1 %249, label %250, label %268
250: ; preds = %247
%251 = call i32 (...) @rand()
%252 = srem i32 %251, 32
%253 = add nsw i32 %252, 1
%254 = trunc i32 %253 to i16
%255 = load i32, i32* %2
%256 = sext i32 %255 to i64
%257 = getelementptr inbounds [32 x i16], [32 x i16]* %6, i64 0, i64 %256
store i16 %254, i16* %257
%258 = load i32, i32* %2
%259 = sext i32 %258 to i64
%260 = getelementptr inbounds [32 x i16], [32 x i16]* %6, i64 0, i64 %259
%261 = load i16, i16* %260
%262 = sext i16 %261 to i32
%263 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %262)
%264 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %265
265: ; preds = %250
%266 = load i32, i32* %2
%267 = add nsw i32 %266, 1
store i32 %267, i32* %2
br label %247
268: ; preds = %247
%269 = getelementptr inbounds [32 x i16], [32 x i16]* %7, i64 0, i64 0
%270 = getelementptr inbounds [32 x i16], [32 x i16]* %6, i64 0, i64 0
%271 = load i32, i32* %8
%272 = call i32 @fn_dirFHaarWT2p2_I16(i16* %269, i16* %270, i32 32, i32 %271)
%273 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.17, i64 0, i64 0))
%274 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %275
275: ; preds = %286, %268
%276 = load i32, i32* %2
%277 = icmp slt i32 %276, 32
br i1 %277, label %278, label %289
278: ; preds = %275
%279 = load i32, i32* %2
%280 = sext i32 %279 to i64
%281 = getelementptr inbounds [32 x i16], [32 x i16]* %7, i64 0, i64 %280
%282 = load i16, i16* %281
%283 = sext i16 %282 to i32
%284 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %283)
%285 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %286
286: ; preds = %278
%287 = load i32, i32* %2
%288 = add nsw i32 %287, 1
store i32 %288, i32* %2
br label %275
289: ; preds = %275
%290 = getelementptr inbounds [32 x i16], [32 x i16]* %6, i64 0, i64 0
%291 = getelementptr inbounds [32 x i16], [32 x i16]* %7, i64 0, i64 0
%292 = load i32, i32* %8
%293 = call i32 @fn_invFHaarWT2p2_I16(i16* %290, i16* %291, i32 32, i32 %292)
%294 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.18, i64 0, i64 0))
%295 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %296
296: ; preds = %307, %289
%297 = load i32, i32* %2
%298 = icmp slt i32 %297, 32
br i1 %298, label %299, label %310
299: ; preds = %296
%300 = load i32, i32* %2
%301 = sext i32 %300 to i64
%302 = getelementptr inbounds [32 x i16], [32 x i16]* %6, i64 0, i64 %301
%303 = load i16, i16* %302
%304 = sext i16 %303 to i32
%305 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %304)
%306 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %307
307: ; preds = %299
%308 = load i32, i32* %2
%309 = add nsw i32 %308, 1
store i32 %309, i32* %2
br label %296
310: ; preds = %296
%311 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.19, i64 0, i64 0))
%312 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%313 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%314 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%315 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.20, i64 0, i64 0))
%316 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%317 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%318 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%319 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.16, i64 0, i64 0))
%320 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %321
321: ; preds = %339, %310
%322 = load i32, i32* %2
%323 = icmp slt i32 %322, 32
br i1 %323, label %324, label %342
324: ; preds = %321
%325 = call i32 (...) @rand()
%326 = srem i32 %325, 32
%327 = add nsw i32 %326, 1
%328 = trunc i32 %327 to i16
%329 = load i32, i32* %2
%330 = sext i32 %329 to i64
%331 = getelementptr inbounds [32 x i16], [32 x i16]* %6, i64 0, i64 %330
store i16 %328, i16* %331
%332 = load i32, i32* %2
%333 = sext i32 %332 to i64
%334 = getelementptr inbounds [32 x i16], [32 x i16]* %6, i64 0, i64 %333
%335 = load i16, i16* %334
%336 = sext i16 %335 to i32
%337 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %336)
%338 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %339
339: ; preds = %324
%340 = load i32, i32* %2
%341 = add nsw i32 %340, 1
store i32 %341, i32* %2
br label %321
342: ; preds = %321
%343 = getelementptr inbounds [32 x i16], [32 x i16]* %7, i64 0, i64 0
%344 = getelementptr inbounds [32 x i16], [32 x i16]* %6, i64 0, i64 0
%345 = call i32 @fn_dirFHaarWT2p2_I16(i16* %343, i16* %344, i32 32, i32 3)
%346 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.17, i64 0, i64 0))
%347 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %348
348: ; preds = %359, %342
%349 = load i32, i32* %2
%350 = icmp slt i32 %349, 32
br i1 %350, label %351, label %362
351: ; preds = %348
%352 = load i32, i32* %2
%353 = sext i32 %352 to i64
%354 = getelementptr inbounds [32 x i16], [32 x i16]* %7, i64 0, i64 %353
%355 = load i16, i16* %354
%356 = sext i16 %355 to i32
%357 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %356)
%358 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %359
359: ; preds = %351
%360 = load i32, i32* %2
%361 = add nsw i32 %360, 1
store i32 %361, i32* %2
br label %348
362: ; preds = %348
%363 = getelementptr inbounds [32 x i16], [32 x i16]* %6, i64 0, i64 0
%364 = getelementptr inbounds [32 x i16], [32 x i16]* %7, i64 0, i64 0
%365 = call i32 @fn_invFHaarWT2p2_I16(i16* %363, i16* %364, i32 32, i32 3)
%366 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.18, i64 0, i64 0))
%367 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %2
br label %368
368: ; preds = %379, %362
%369 = load i32, i32* %2
%370 = icmp slt i32 %369, 32
br i1 %370, label %371, label %382
371: ; preds = %368
%372 = load i32, i32* %2
%373 = sext i32 %372 to i64
%374 = getelementptr inbounds [32 x i16], [32 x i16]* %6, i64 0, i64 %373
%375 = load i16, i16* %374
%376 = sext i16 %375 to i32
%377 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %376)
%378 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
br label %379
379: ; preds = %371
%380 = load i32, i32* %2
%381 = add nsw i32 %380, 1
store i32 %381, i32* %2
br label %368
382: ; preds = %368
%383 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.19, i64 0, i64 0))
%384 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
ret i32 0
}

LLVM IR (-O2):
@__const.main.ai_data = [8 x i16] [i16 16, i16 8, i16 12, i16 16, i16 18, i16 14, i16 4, i16 8]
@.str = [66 x i8] c"-----------------------------------------------------------------\00"
@.str.2 = [19 x i8] c" determining test \00"
@.str.3 = [12 x i8] c" one stage \00"
@.str.4 = [9 x i8] c" input: \00"
@.str.5 = [4 x i8] c"%d \00"
@.str.6 = [10 x i8] c" output: \00"
@.str.7 = [16 x i8] c" input, again: \00"
@.str.8 = [12 x i8] c" one level \00"
@.str.9 = [13 x i8] c" full level \00"
@.str.10 = [13 x i8] c"i_step = %d \00"
@.str.11 = [9 x i8] c" W3: %d \00"
@.str.12 = [9 x i8] c" W2: %d \00"
@.str.13 = [9 x i8] c" W1: %d \00"
@.str.14 = [9 x i8] c" W0: %d \00"
@.str.15 = [14 x i8] c" random test \00"
@.str.16 = [16 x i8] c" input random: \00"
@.str.17 = [17 x i8] c" output random: \00"
@.str.18 = [23 x i8] c" input random, again: \00"
@.str.19 = [33 x i8] c" Well? Almost (!) The same? ))) \00"
@.str.20 = [24 x i8] c" random semi-full test \00"
define i32 @main() {
%1 = alloca [8 x i16]
%2 = alloca [8 x i16]
%3 = alloca [32 x i16]
%4 = alloca [32 x i16]
%5 = bitcast [8 x i16]* %1 to i8*
%6 = bitcast [8 x i16]* %2 to i8*
%7 = tail call i32 @log(i32 8)
%8 = tail call i32 @log(i32 2)
%9 = bitcast [32 x i16]* %3 to i8*
%10 = bitcast [32 x i16]* %4 to i8*
%11 = tail call i32 @log(i32 32)
%12 = tail call i32 @log(i32 2)
%13 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%14 = tail call i32 @putchar(i32 10)
%15 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @.str.2, i64 0, i64 0))
%16 = tail call i32 @putchar(i32 10)
%17 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%18 = tail call i32 @putchar(i32 10)
%19 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 0))
%20 = tail call i32 @putchar(i32 10)
%21 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%22 = tail call i32 @putchar(i32 10)
%23 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0))
%24 = tail call i32 @putchar(i32 10)
%25 = getelementptr inbounds [8 x i16], [8 x i16]* %1, i64 0, i64 0
%26 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 16)
%27 = tail call i32 @putchar(i32 10)
%28 = getelementptr inbounds [8 x i16], [8 x i16]* %1, i64 0, i64 1
%29 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 8)
%30 = tail call i32 @putchar(i32 10)
%31 = getelementptr inbounds [8 x i16], [8 x i16]* %1, i64 0, i64 2
%32 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 12)
%33 = tail call i32 @putchar(i32 10)
%34 = getelementptr inbounds [8 x i16], [8 x i16]* %1, i64 0, i64 3
%35 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 16)
%36 = tail call i32 @putchar(i32 10)
%37 = getelementptr inbounds [8 x i16], [8 x i16]* %1, i64 0, i64 4
%38 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 18)
%39 = tail call i32 @putchar(i32 10)
%40 = getelementptr inbounds [8 x i16], [8 x i16]* %1, i64 0, i64 5
%41 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 14)
%42 = tail call i32 @putchar(i32 10)
%43 = getelementptr inbounds [8 x i16], [8 x i16]* %1, i64 0, i64 6
%44 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 4)
%45 = tail call i32 @putchar(i32 10)
%46 = getelementptr inbounds [8 x i16], [8 x i16]* %1, i64 0, i64 7
%47 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 8)
%48 = tail call i32 @putchar(i32 10)
%49 = sdiv i32 %7, %8
%50 = getelementptr inbounds [8 x i16], [8 x i16]* %2, i64 0, i64 0
%51 = call i32 @fn_dirFHaarWT2p2oneStage_I16(i16* %50, i16* %25, i32 8)
%52 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.6, i64 0, i64 0))
%53 = call i32 @putchar(i32 10)
%54 = load i16, i16* %50
%55 = sext i16 %54 to i32
%56 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %55)
%57 = call i32 @putchar(i32 10)
%58 = getelementptr inbounds [8 x i16], [8 x i16]* %2, i64 0, i64 1
%59 = load i16, i16* %58
%60 = sext i16 %59 to i32
%61 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %60)
%62 = call i32 @putchar(i32 10)
%63 = getelementptr inbounds [8 x i16], [8 x i16]* %2, i64 0, i64 2
%64 = load i16, i16* %63
%65 = sext i16 %64 to i32
%66 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %65)
%67 = call i32 @putchar(i32 10)
%68 = getelementptr inbounds [8 x i16], [8 x i16]* %2, i64 0, i64 3
%69 = load i16, i16* %68
%70 = sext i16 %69 to i32
%71 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %70)
%72 = call i32 @putchar(i32 10)
%73 = getelementptr inbounds [8 x i16], [8 x i16]* %2, i64 0, i64 4
%74 = load i16, i16* %73
%75 = sext i16 %74 to i32
%76 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %75)
%77 = call i32 @putchar(i32 10)
%78 = getelementptr inbounds [8 x i16], [8 x i16]* %2, i64 0, i64 5
%79 = load i16, i16* %78
%80 = sext i16 %79 to i32
%81 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %80)
%82 = call i32 @putchar(i32 10)
%83 = getelementptr inbounds [8 x i16], [8 x i16]* %2, i64 0, i64 6
%84 = load i16, i16* %83
%85 = sext i16 %84 to i32
%86 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %85)
%87 = call i32 @putchar(i32 10)
%88 = getelementptr inbounds [8 x i16], [8 x i16]* %2, i64 0, i64 7
%89 = load i16, i16* %88
%90 = sext i16 %89 to i32
%91 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %90)
%92 = call i32 @putchar(i32 10)
%93 = call i32 @fn_invFHaarWT2p2oneStage_I16(i16* %25, i16* %50, i32 8)
%94 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0))
%95 = call i32 @putchar(i32 10)
%96 = load i16, i16* %25
%97 = sext i16 %96 to i32
%98 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %97)
%99 = call i32 @putchar(i32 10)
%100 = load i16, i16* %28
%101 = sext i16 %100 to i32
%102 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %101)
%103 = call i32 @putchar(i32 10)
%104 = load i16, i16* %31
%105 = sext i16 %104 to i32
%106 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %105)
%107 = call i32 @putchar(i32 10)
%108 = load i16, i16* %34
%109 = sext i16 %108 to i32
%110 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %109)
%111 = call i32 @putchar(i32 10)
%112 = load i16, i16* %37
%113 = sext i16 %112 to i32
%114 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %113)
%115 = call i32 @putchar(i32 10)
%116 = load i16, i16* %40
%117 = sext i16 %116 to i32
%118 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %117)
%119 = call i32 @putchar(i32 10)
%120 = load i16, i16* %43
%121 = sext i16 %120 to i32
%122 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %121)
%123 = call i32 @putchar(i32 10)
%124 = load i16, i16* %46
%125 = sext i16 %124 to i32
%126 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %125)
%127 = call i32 @putchar(i32 10)
%128 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%129 = call i32 @putchar(i32 10)
%130 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.8, i64 0, i64 0))
%131 = call i32 @putchar(i32 10)
%132 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%133 = call i32 @putchar(i32 10)
%134 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0))
%135 = call i32 @putchar(i32 10)
%136 = load i16, i16* %25
%137 = sext i16 %136 to i32
%138 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %137)
%139 = call i32 @putchar(i32 10)
%140 = load i16, i16* %28
%141 = sext i16 %140 to i32
%142 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %141)
%143 = call i32 @putchar(i32 10)
%144 = load i16, i16* %31
%145 = sext i16 %144 to i32
%146 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %145)
%147 = call i32 @putchar(i32 10)
%148 = load i16, i16* %34
%149 = sext i16 %148 to i32
%150 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %149)
%151 = call i32 @putchar(i32 10)
%152 = load i16, i16* %37
%153 = sext i16 %152 to i32
%154 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %153)
%155 = call i32 @putchar(i32 10)
%156 = load i16, i16* %40
%157 = sext i16 %156 to i32
%158 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %157)
%159 = call i32 @putchar(i32 10)
%160 = load i16, i16* %43
%161 = sext i16 %160 to i32
%162 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %161)
%163 = call i32 @putchar(i32 10)
%164 = load i16, i16* %46
%165 = sext i16 %164 to i32
%166 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %165)
%167 = call i32 @putchar(i32 10)
%168 = call i32 @fn_dirFHaarWT2p2_I16(i16* %50, i16* %25, i32 8, i32 1)
%169 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.6, i64 0, i64 0))
%170 = call i32 @putchar(i32 10)
%171 = load i16, i16* %50
%172 = sext i16 %171 to i32
%173 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %172)
%174 = call i32 @putchar(i32 10)
%175 = load i16, i16* %58
%176 = sext i16 %175 to i32
%177 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %176)
%178 = call i32 @putchar(i32 10)
%179 = load i16, i16* %63
%180 = sext i16 %179 to i32
%181 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %180)
%182 = call i32 @putchar(i32 10)
%183 = load i16, i16* %68
%184 = sext i16 %183 to i32
%185 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %184)
%186 = call i32 @putchar(i32 10)
%187 = load i16, i16* %73
%188 = sext i16 %187 to i32
%189 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %188)
%190 = call i32 @putchar(i32 10)
%191 = load i16, i16* %78
%192 = sext i16 %191 to i32
%193 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %192)
%194 = call i32 @putchar(i32 10)
%195 = load i16, i16* %83
%196 = sext i16 %195 to i32
%197 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %196)
%198 = call i32 @putchar(i32 10)
%199 = load i16, i16* %88
%200 = sext i16 %199 to i32
%201 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %200)
%202 = call i32 @putchar(i32 10)
%203 = call i32 @fn_invFHaarWT2p2_I16(i16* %25, i16* %50, i32 8, i32 1)
%204 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0))
%205 = call i32 @putchar(i32 10)
%206 = load i16, i16* %25
%207 = sext i16 %206 to i32
%208 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %207)
%209 = call i32 @putchar(i32 10)
%210 = load i16, i16* %28
%211 = sext i16 %210 to i32
%212 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %211)
%213 = call i32 @putchar(i32 10)
%214 = load i16, i16* %31
%215 = sext i16 %214 to i32
%216 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %215)
%217 = call i32 @putchar(i32 10)
%218 = load i16, i16* %34
%219 = sext i16 %218 to i32
%220 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %219)
%221 = call i32 @putchar(i32 10)
%222 = load i16, i16* %37
%223 = sext i16 %222 to i32
%224 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %223)
%225 = call i32 @putchar(i32 10)
%226 = load i16, i16* %40
%227 = sext i16 %226 to i32
%228 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %227)
%229 = call i32 @putchar(i32 10)
%230 = load i16, i16* %43
%231 = sext i16 %230 to i32
%232 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %231)
%233 = call i32 @putchar(i32 10)
%234 = load i16, i16* %46
%235 = sext i16 %234 to i32
%236 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %235)
%237 = call i32 @putchar(i32 10)
%238 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%239 = call i32 @putchar(i32 10)
%240 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.9, i64 0, i64 0))
%241 = call i32 @putchar(i32 10)
%242 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%243 = call i32 @putchar(i32 10)
%244 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0))
%245 = call i32 @putchar(i32 10)
%246 = load i16, i16* %25
%247 = sext i16 %246 to i32
%248 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %247)
%249 = call i32 @putchar(i32 10)
%250 = load i16, i16* %28
%251 = sext i16 %250 to i32
%252 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %251)
%253 = call i32 @putchar(i32 10)
%254 = load i16, i16* %31
%255 = sext i16 %254 to i32
%256 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %255)
%257 = call i32 @putchar(i32 10)
%258 = load i16, i16* %34
%259 = sext i16 %258 to i32
%260 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %259)
%261 = call i32 @putchar(i32 10)
%262 = load i16, i16* %37
%263 = sext i16 %262 to i32
%264 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %263)
%265 = call i32 @putchar(i32 10)
%266 = load i16, i16* %40
%267 = sext i16 %266 to i32
%268 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %267)
%269 = call i32 @putchar(i32 10)
%270 = load i16, i16* %43
%271 = sext i16 %270 to i32
%272 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %271)
%273 = call i32 @putchar(i32 10)
%274 = load i16, i16* %46
%275 = sext i16 %274 to i32
%276 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %275)
%277 = call i32 @putchar(i32 10)
%278 = call i32 @putchar(i32 10)
%279 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.10, i64 0, i64 0), i32 %49)
%280 = call i32 @putchar(i32 10)
%281 = call i32 @putchar(i32 10)
%282 = call i32 @fn_dirFHaarWT2p2_I16(i16* %50, i16* %25, i32 8, i32 %49)
%283 = load i16, i16* %50
%284 = sext i16 %283 to i32
%285 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.11, i64 0, i64 0), i32 %284)
%286 = call i32 @putchar(i32 10)
%287 = load i16, i16* %58
%288 = sext i16 %287 to i32
%289 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.11, i64 0, i64 0), i32 %288)
%290 = call i32 @putchar(i32 10)
%291 = load i16, i16* %63
%292 = sext i16 %291 to i32
%293 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.11, i64 0, i64 0), i32 %292)
%294 = call i32 @putchar(i32 10)
%295 = load i16, i16* %68
%296 = sext i16 %295 to i32
%297 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.11, i64 0, i64 0), i32 %296)
%298 = call i32 @putchar(i32 10)
%299 = load i16, i16* %73
%300 = sext i16 %299 to i32
%301 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.12, i64 0, i64 0), i32 %300)
%302 = call i32 @putchar(i32 10)
%303 = load i16, i16* %78
%304 = sext i16 %303 to i32
%305 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.12, i64 0, i64 0), i32 %304)
%306 = call i32 @putchar(i32 10)
%307 = load i16, i16* %83
%308 = sext i16 %307 to i32
%309 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.13, i64 0, i64 0), i32 %308)
%310 = call i32 @putchar(i32 10)
%311 = load i16, i16* %88
%312 = sext i16 %311 to i32
%313 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.14, i64 0, i64 0), i32 %312)
%314 = call i32 @putchar(i32 10)
%315 = call i32 @fn_invFHaarWT2p2_I16(i16* %25, i16* %50, i32 8, i32 %49)
%316 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.7, i64 0, i64 0))
%317 = call i32 @putchar(i32 10)
%318 = load i16, i16* %25
%319 = sext i16 %318 to i32
%320 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %319)
%321 = call i32 @putchar(i32 10)
%322 = load i16, i16* %28
%323 = sext i16 %322 to i32
%324 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %323)
%325 = call i32 @putchar(i32 10)
%326 = load i16, i16* %31
%327 = sext i16 %326 to i32
%328 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %327)
%329 = call i32 @putchar(i32 10)
%330 = load i16, i16* %34
%331 = sext i16 %330 to i32
%332 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %331)
%333 = call i32 @putchar(i32 10)
%334 = load i16, i16* %37
%335 = sext i16 %334 to i32
%336 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %335)
%337 = call i32 @putchar(i32 10)
%338 = load i16, i16* %40
%339 = sext i16 %338 to i32
%340 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %339)
%341 = call i32 @putchar(i32 10)
%342 = load i16, i16* %43
%343 = sext i16 %342 to i32
%344 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %343)
%345 = call i32 @putchar(i32 10)
%346 = load i16, i16* %46
%347 = sext i16 %346 to i32
%348 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %347)
%349 = call i32 @putchar(i32 10)
%350 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%351 = call i32 @putchar(i32 10)
%352 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @.str.15, i64 0, i64 0))
%353 = call i32 @putchar(i32 10)
%354 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%355 = call i32 @putchar(i32 10)
%356 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.16, i64 0, i64 0))
%357 = call i32 @putchar(i32 10)
br label %358
358: ; preds = %0, %358
%359 = phi i64 [ 0, %0 ], [ %368, %358 ]
%360 = call i32 (...) @rand()
%361 = srem i32 %360, 32
%362 = trunc i32 %361 to i16
%363 = add nsw i16 %362, 1
%364 = getelementptr inbounds [32 x i16], [32 x i16]* %3, i64 0, i64 %359
store i16 %363, i16* %364
%365 = sext i16 %363 to i32
%366 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %365)
%367 = call i32 @putchar(i32 10)
%368 = add nuw nsw i64 %359, 1
%369 = icmp eq i64 %368, 32
br i1 %369, label %370, label %358
370: ; preds = %358
%371 = sdiv i32 %11, %12
%372 = getelementptr inbounds [32 x i16], [32 x i16]* %4, i64 0, i64 0
%373 = getelementptr inbounds [32 x i16], [32 x i16]* %3, i64 0, i64 0
%374 = call i32 @fn_dirFHaarWT2p2_I16(i16* %372, i16* %373, i32 32, i32 %371)
%375 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.17, i64 0, i64 0))
%376 = call i32 @putchar(i32 10)
br label %377
377: ; preds = %370, %377
%378 = phi i64 [ 0, %370 ], [ %384, %377 ]
%379 = getelementptr inbounds [32 x i16], [32 x i16]* %4, i64 0, i64 %378
%380 = load i16, i16* %379
%381 = sext i16 %380 to i32
%382 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %381)
%383 = call i32 @putchar(i32 10)
%384 = add nuw nsw i64 %378, 1
%385 = icmp eq i64 %384, 32
br i1 %385, label %386, label %377
386: ; preds = %377
%387 = call i32 @fn_invFHaarWT2p2_I16(i16* %373, i16* %372, i32 32, i32 %371)
%388 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.18, i64 0, i64 0))
%389 = call i32 @putchar(i32 10)
br label %390
390: ; preds = %386, %390
%391 = phi i64 [ 0, %386 ], [ %397, %390 ]
%392 = getelementptr inbounds [32 x i16], [32 x i16]* %3, i64 0, i64 %391
%393 = load i16, i16* %392
%394 = sext i16 %393 to i32
%395 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %394)
%396 = call i32 @putchar(i32 10)
%397 = add nuw nsw i64 %391, 1
%398 = icmp eq i64 %397, 32
br i1 %398, label %399, label %390
399: ; preds = %390
%400 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.19, i64 0, i64 0))
%401 = call i32 @putchar(i32 10)
%402 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%403 = call i32 @putchar(i32 10)
%404 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.20, i64 0, i64 0))
%405 = call i32 @putchar(i32 10)
%406 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @.str, i64 0, i64 0))
%407 = call i32 @putchar(i32 10)
%408 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.16, i64 0, i64 0))
%409 = call i32 @putchar(i32 10)
br label %410
410: ; preds = %399, %410
%411 = phi i64 [ 0, %399 ], [ %420, %410 ]
%412 = call i32 (...) @rand()
%413 = srem i32 %412, 32
%414 = trunc i32 %413 to i16
%415 = add nsw i16 %414, 1
%416 = getelementptr inbounds [32 x i16], [32 x i16]* %3, i64 0, i64 %411
store i16 %415, i16* %416
%417 = sext i16 %415 to i32
%418 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %417)
%419 = call i32 @putchar(i32 10)
%420 = add nuw nsw i64 %411, 1
%421 = icmp eq i64 %420, 32
br i1 %421, label %422, label %410
422: ; preds = %410
%423 = call i32 @fn_dirFHaarWT2p2_I16(i16* %372, i16* %373, i32 32, i32 3)
%424 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.17, i64 0, i64 0))
%425 = call i32 @putchar(i32 10)
br label %426
426: ; preds = %422, %426
%427 = phi i64 [ 0, %422 ], [ %433, %426 ]
%428 = getelementptr inbounds [32 x i16], [32 x i16]* %4, i64 0, i64 %427
%429 = load i16, i16* %428
%430 = sext i16 %429 to i32
%431 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %430)
%432 = call i32 @putchar(i32 10)
%433 = add nuw nsw i64 %427, 1
%434 = icmp eq i64 %433, 32
br i1 %434, label %435, label %426
435: ; preds = %426
%436 = call i32 @fn_invFHaarWT2p2_I16(i16* %373, i16* %372, i32 32, i32 3)
%437 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.18, i64 0, i64 0))
%438 = call i32 @putchar(i32 10)
br label %439
439: ; preds = %435, %439
%440 = phi i64 [ 0, %435 ], [ %446, %439 ]
%441 = getelementptr inbounds [32 x i16], [32 x i16]* %3, i64 0, i64 %440
%442 = load i16, i16* %441
%443 = sext i16 %442 to i32
%444 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 %443)
%445 = call i32 @putchar(i32 10)
%446 = add nuw nsw i64 %440, 1
%447 = icmp eq i64 %446, 32
br i1 %447, label %448, label %439
448: ; preds = %439
%449 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.19, i64 0, i64 0))
%450 = call i32 @putchar(i32 10)
ret i32 0
}