#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_NoaK(int **, int *, int, int);
int /*<<< orphan*/ fn_dirFHaarWT2p2oneStage_NoaK(int *, int *, int *, int);
int /*<<< orphan*/ fn_invFHaarWT2p2_NoaK(int *, int **, int, int);
int /*<<< orphan*/ fn_invFHaarWT2p2oneStage_NoaK(int *, int *, int *, int);
int /*<<< orphan*/ ifn_array2wk(int *, int, int, int **);
int /*<<< orphan*/ printf(char *, ...);
int rand();
int main() {
  int i;
  int ai_data[8] = {16, 8, 12, 16, 18, 14, 4, 8};
  int ai_k[8];
  int *a4p2wki[4];
  unsigned int i_step = 3;
  int ai_Rdata[32];
  int ai_Rk[32];
  int *a4p2wkiR[6];
  unsigned int i_Rstep = 5;
  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_NoaK(ai_k, &ai_k[4], ai_data, 8);
  printf(" output: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_k[i]);
    printf("\n");
  }
  fn_invFHaarWT2p2oneStage_NoaK(ai_data, ai_k, &ai_k[4], 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");
  }
  ifn_array2wk(ai_k, 1, 8, a4p2wki);
  fn_dirFHaarWT2p2_NoaK(a4p2wki, ai_data, 8, 1);
  printf(" output: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_k[i]);
    printf("\n");
  }
  fn_invFHaarWT2p2_NoaK(ai_data, a4p2wki, 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");
  ifn_array2wk(ai_k, i_step, 8, a4p2wki);
  fn_dirFHaarWT2p2_NoaK(a4p2wki, 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_NoaK(ai_data, a4p2wki, 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");
  }
  ifn_array2wk(ai_Rk, i_Rstep, 32, a4p2wkiR);
  fn_dirFHaarWT2p2_NoaK(a4p2wkiR, 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_NoaK(ai_Rdata, a4p2wkiR, 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");
  }
  ifn_array2wk(ai_Rk, 3, 32, a4p2wkiR);
  fn_dirFHaarWT2p2_NoaK(a4p2wkiR, ai_Rdata, 32, 3);
  printf(" output random: ");
  printf("\n");
  for (i = 0; i < 32; i++) {
    printf("%d ", ai_Rk[i]);
    printf("\n");
  }
  fn_invFHaarWT2p2_NoaK(ai_Rdata, a4p2wkiR, 32, 3);
  printf(" input random, again: ");
  printf("\n");
  for (i = 0; i < 32; i++) {
    printf("%d ", ai_Rdata[i]);
    printf("\n");
  }
  printf(" Well? Seems to be true? ))) ");
  printf("\n");
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1c0,%rsp
movl   $0x0,-0x4(%rbp)
mov    0xe77(%rip),%rax
mov    %rax,-0x30(%rbp)
mov    0xe74(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0xe71(%rip),%rax
mov    %rax,-0x20(%rbp)
mov    0xe6e(%rip),%rax
mov    %rax,-0x18(%rbp)
movl   $0x3,-0x74(%rbp)
movl   $0x5,-0x1b4(%rbp)
lea    0xe5a(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xe8e(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xe82(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xe72(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xe22(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xe56(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xe5d(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xe3a(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xdea(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xe1e(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xe31(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xe02(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    12aa <main+0x13a>
movslq -0x8(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%esi
lea    0xe65(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xdcd(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    126e <main+0xfe>
lea    -0x50(%rbp),%rdi
lea    -0x50(%rbp),%rsi
add    $0x10,%rsi
lea    -0x30(%rbp),%rdx
mov    $0x8,%ecx
call   1030 <fn_dirFHaarWT2p2oneStage_NoaK@plt>
lea    0xdc1(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xd89(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    1323 <main+0x1b3>
movslq -0x8(%rbp),%rax
mov    -0x50(%rbp,%rax,4),%esi
lea    0xdec(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xd54(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12e7 <main+0x177>
lea    -0x30(%rbp),%rdi
lea    -0x50(%rbp),%rsi
lea    -0x50(%rbp),%rdx
add    $0x10,%rdx
mov    $0x8,%ecx
call   1060 <fn_invFHaarWT2p2oneStage_NoaK@plt>
lea    0xd52(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xd10(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    139c <main+0x22c>
movslq -0x8(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%esi
lea    0xd73(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xcdb(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1360 <main+0x1f0>
lea    0xc7d(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xcb1(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xce7(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xc95(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xc45(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xc79(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xc8c(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xc5d(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    144f <main+0x2df>
movslq -0x8(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%esi
lea    0xcc0(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xc28(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1413 <main+0x2a3>
lea    -0x50(%rbp),%rdi
lea    -0x70(%rbp),%rcx
mov    $0x1,%esi
mov    $0x8,%edx
call   1080 <ifn_array2wk@plt>
lea    -0x70(%rbp),%rdi
lea    -0x30(%rbp),%rsi
mov    $0x8,%edx
mov    $0x1,%ecx
call   1070 <fn_dirFHaarWT2p2_NoaK@plt>
lea    0xc08(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xbd0(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    14dc <main+0x36c>
movslq -0x8(%rbp),%rax
mov    -0x50(%rbp,%rax,4),%esi
lea    0xc33(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xb9b(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    14a0 <main+0x330>
lea    -0x30(%rbp),%rdi
lea    -0x70(%rbp),%rsi
mov    $0x8,%edx
mov    $0x1,%ecx
call   1040 <fn_invFHaarWT2p2_NoaK@plt>
lea    0xb9c(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xb5a(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    1552 <main+0x3e2>
movslq -0x8(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%esi
lea    0xbbd(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xb25(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1516 <main+0x3a6>
lea    0xac7(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xafb(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xb3d(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xadf(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xa8f(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xac3(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xad6(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xaa7(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    1605 <main+0x495>
movslq -0x8(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%esi
lea    0xb0a(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xa72(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    15c9 <main+0x459>
lea    0xa56(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x74(%rbp),%esi
lea    0xaa2(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xa37(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xa29(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    -0x50(%rbp),%rdi
mov    -0x74(%rbp),%esi
lea    -0x70(%rbp),%rcx
mov    $0x8,%edx
call   1080 <ifn_array2wk@plt>
lea    -0x70(%rbp),%rdi
lea    -0x30(%rbp),%rsi
mov    -0x74(%rbp),%ecx
mov    $0x8,%edx
call   1070 <fn_dirFHaarWT2p2_NoaK@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x4,-0x8(%rbp)
jge    16ad <main+0x53d>
movslq -0x8(%rbp),%rax
mov    -0x50(%rbp,%rax,4),%esi
lea    0xa42(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x9ca(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1671 <main+0x501>
movl   $0x4,-0x8(%rbp)
cmpl   $0x6,-0x8(%rbp)
jge    16f0 <main+0x580>
movslq -0x8(%rbp),%rax
mov    -0x50(%rbp,%rax,4),%esi
lea    0xa08(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x987(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    16b4 <main+0x544>
mov    -0x38(%rbp),%esi
lea    0x9e4(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x95a(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x34(%rbp),%esi
lea    0x9ce(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x93b(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    -0x30(%rbp),%rdi
lea    -0x70(%rbp),%rsi
mov    -0x74(%rbp),%ecx
mov    $0x8,%edx
call   1040 <fn_invFHaarWT2p2_NoaK@plt>
lea    0x94c(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x90a(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x8,-0x8(%rbp)
jge    17a2 <main+0x632>
movslq -0x8(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%esi
lea    0x96d(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x8d5(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1766 <main+0x5f6>
lea    0x877(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x8ab(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x92b(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x88f(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x83f(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x873(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x901(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x857(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x20,-0x8(%rbp)
jge    1875 <main+0x705>
mov    $0x0,%al
call   1090 <rand@plt>
mov    $0x20,%ecx
cltd
idiv   %ecx
add    $0x1,%edx
movslq -0x8(%rbp),%rax
mov    %edx,-0x100(%rbp,%rax,4)
movslq -0x8(%rbp),%rax
mov    -0x100(%rbp,%rax,4),%esi
lea    0x89a(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x802(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1819 <main+0x6a9>
lea    -0x180(%rbp),%rdi
mov    -0x1b4(%rbp),%esi
lea    -0x1b0(%rbp),%rcx
mov    $0x20,%edx
call   1080 <ifn_array2wk@plt>
lea    -0x1b0(%rbp),%rdi
lea    -0x100(%rbp),%rsi
mov    -0x1b4(%rbp),%ecx
mov    $0x20,%edx
call   1070 <fn_dirFHaarWT2p2_NoaK@plt>
lea    0x856(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x79c(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x20,-0x8(%rbp)
jge    1913 <main+0x7a3>
movslq -0x8(%rbp),%rax
mov    -0x180(%rbp,%rax,4),%esi
lea    0x7fc(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x764(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    18d4 <main+0x764>
lea    -0x100(%rbp),%rdi
lea    -0x1b0(%rbp),%rsi
mov    -0x1b4(%rbp),%ecx
mov    $0x20,%edx
call   1040 <fn_invFHaarWT2p2_NoaK@plt>
lea    0x7e7(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x71c(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x20,-0x8(%rbp)
jge    1993 <main+0x823>
movslq -0x8(%rbp),%rax
mov    -0x100(%rbp,%rax,4),%esi
lea    0x77c(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x6e4(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1954 <main+0x7e4>
lea    0x79c(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x6ba(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x66a(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x69e(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x785(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x682(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x632(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x666(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x6f4(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x64a(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x20,-0x8(%rbp)
jge    1a82 <main+0x912>
mov    $0x0,%al
call   1090 <rand@plt>
mov    $0x20,%ecx
cltd
idiv   %ecx
add    $0x1,%edx
movslq -0x8(%rbp),%rax
mov    %edx,-0x100(%rbp,%rax,4)
movslq -0x8(%rbp),%rax
mov    -0x100(%rbp,%rax,4),%esi
lea    0x68d(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x5f5(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1a26 <main+0x8b6>
lea    -0x180(%rbp),%rdi
lea    -0x1b0(%rbp),%rcx
mov    $0x3,%esi
mov    $0x20,%edx
call   1080 <ifn_array2wk@plt>
lea    -0x1b0(%rbp),%rdi
lea    -0x100(%rbp),%rsi
mov    $0x20,%edx
mov    $0x3,%ecx
call   1070 <fn_dirFHaarWT2p2_NoaK@plt>
lea    0x64b(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x591(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x20,-0x8(%rbp)
jge    1b1e <main+0x9ae>
movslq -0x8(%rbp),%rax
mov    -0x180(%rbp,%rax,4),%esi
lea    0x5f1(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x559(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1adf <main+0x96f>
lea    -0x100(%rbp),%rdi
lea    -0x1b0(%rbp),%rsi
mov    $0x20,%edx
mov    $0x3,%ecx
call   1040 <fn_invFHaarWT2p2_NoaK@plt>
lea    0x5dd(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x512(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x8(%rbp)
cmpl   $0x20,-0x8(%rbp)
jge    1b9d <main+0xa2d>
movslq -0x8(%rbp),%rax
mov    -0x100(%rbp,%rax,4),%esi
lea    0x572(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x4da(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1b5e <main+0x9ee>
lea    0x5cb(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x4b0(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
xor    %eax,%eax
add    $0x1c0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x198,%rsp
movaps 0xe78(%rip),%xmm0
movaps %xmm0,0x10(%rsp)
movaps 0xe5c(%rip),%xmm0
movaps %xmm0,(%rsp)
lea    0xe71(%rip),%r14
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xe98(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xe7f(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xe5f(%rip),%r12
mov    %r12,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xead(%rip),%rbx
mov    %rbx,%rdi
mov    $0x10,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbx,%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbx,%rdi
mov    $0xc,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbx,%rdi
mov    $0x10,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbx,%rdi
mov    $0x12,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbx,%rdi
mov    $0xe,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbx,%rdi
mov    $0x4,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbx,%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x30(%rsp),%r13
lea    0x20(%rsp),%rbp
mov    %rsp,%r15
mov    %rbp,%rdi
mov    %r13,%rsi
mov    %r15,%rdx
mov    $0x8,%ecx
call   1040 <fn_dirFHaarWT2p2oneStage_NoaK@plt>
lea    0xd5e(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x20(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x24(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x28(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x2c(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x30(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x34(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x38(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x3c(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r15,%rdi
mov    %rbp,%rsi
mov    %r13,%rdx
mov    $0x8,%ecx
call   1070 <fn_invFHaarWT2p2oneStage_NoaK@plt>
lea    0xc7d(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    (%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x4(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x8(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0xc(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x10(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x14(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x18(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x1c(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xba2(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r12,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    (%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x4(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x8(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0xc(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x10(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x14(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x18(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x1c(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x170(%rsp),%r13
mov    %rbp,%rdi
mov    $0x1,%esi
mov    $0x8,%edx
mov    %r13,%rcx
call   1090 <ifn_array2wk@plt>
mov    %r13,%rdi
mov    %r15,%rsi
mov    $0x8,%edx
mov    $0x1,%ecx
call   1080 <fn_dirFHaarWT2p2_NoaK@plt>
lea    0xa57(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x20(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x24(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x28(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x2c(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x30(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x34(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x38(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x3c(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r15,%rdi
mov    %r13,%rsi
mov    $0x8,%edx
mov    $0x1,%ecx
call   1050 <fn_invFHaarWT2p2_NoaK@plt>
lea    0x974(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    (%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x4(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x8(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0xc(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x10(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x14(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x18(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x1c(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x8a5(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r12,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    (%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x4(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x8(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0xc(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x10(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x14(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x18(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x1c(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x7a9(%rip),%rdi
mov    $0x3,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbp,%rdi
mov    $0x3,%esi
mov    $0x8,%edx
mov    %r13,%rcx
call   1090 <ifn_array2wk@plt>
mov    %r13,%rdi
mov    %r15,%rsi
mov    $0x8,%edx
mov    $0x3,%ecx
call   1080 <fn_dirFHaarWT2p2_NoaK@plt>
mov    0x20(%rsp),%esi
lea    0x761(%rip),%rbp
mov    %rbp,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x24(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x28(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x2c(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x30(%rsp),%esi
lea    0x703(%rip),%rbp
mov    %rbp,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x34(%rsp),%esi
mov    %rbp,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x38(%rsp),%esi
lea    0x6d5(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x3c(%rsp),%esi
lea    0x6c2(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r15,%rdi
mov    %r13,%rsi
mov    $0x8,%edx
mov    $0x3,%ecx
call   1050 <fn_invFHaarWT2p2_NoaK@plt>
lea    0x644(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    (%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x4(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x8(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0xc(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x10(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x14(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x18(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    0x1c(%rsp),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x5b3(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x595(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %ebp,%ebp
nopw   0x0(%rax,%rax,1)
xor    %eax,%eax
call   10a0 <rand@plt>
lea    0x1f(%rax),%ecx
test   %eax,%eax
cmovns %eax,%ecx
and    $0xffffffe0,%ecx
neg    %ecx
lea    (%rax,%rcx,1),%esi
add    $0x1,%esi
mov    %esi,0x70(%rsp,%rbp,4)
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x1,%rbp
cmp    $0x20,%rbp
jne    1b80 <main+0xa00>
lea    0xf0(%rsp),%rdi
lea    0x40(%rsp),%rbx
mov    $0x5,%esi
mov    $0x20,%edx
mov    %rbx,%rcx
call   1090 <ifn_array2wk@plt>
lea    0x70(%rsp),%rsi
mov    %rbx,%rdi
mov    $0x20,%edx
mov    $0x5,%ecx
call   1080 <fn_dirFHaarWT2p2_NoaK@plt>
lea    0x513(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x4d9(%rip),%rbx
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0xf0(%rsp,%rbp,4),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x1,%rbp
cmp    $0x20,%rbp
jne    1c20 <main+0xaa0>
lea    0x70(%rsp),%rdi
lea    0x40(%rsp),%rsi
mov    $0x20,%edx
mov    $0x5,%ecx
call   1050 <fn_invFHaarWT2p2_NoaK@plt>
lea    0x4b8(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x46d(%rip),%rbx
xor    %ebp,%ebp
nop
mov    0x70(%rsp,%rbp,4),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x1,%rbp
cmp    $0x20,%rbp
jne    1c80 <main+0xb00>
lea    0x48b(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x35f(%rip),%rbx
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x479(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x3f4(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x3ca(%rip),%rbx
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xor    %eax,%eax
call   10a0 <rand@plt>
lea    0x1f(%rax),%ecx
test   %eax,%eax
cmovns %eax,%ecx
and    $0xffffffe0,%ecx
neg    %ecx
lea    (%rax,%rcx,1),%esi
add    $0x1,%esi
mov    %esi,0x70(%rsp,%rbp,4)
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x1,%rbp
cmp    $0x20,%rbp
jne    1d30 <main+0xbb0>
lea    0xf0(%rsp),%rdi
lea    0x40(%rsp),%rbx
mov    $0x3,%esi
mov    $0x20,%edx
mov    %rbx,%rcx
call   1090 <ifn_array2wk@plt>
lea    0x70(%rsp),%rsi
mov    %rbx,%rdi
mov    $0x20,%edx
mov    $0x3,%ecx
call   1080 <fn_dirFHaarWT2p2_NoaK@plt>
lea    0x363(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x329(%rip),%rbx
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0xf0(%rsp,%rbp,4),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x1,%rbp
cmp    $0x20,%rbp
jne    1dd0 <main+0xc50>
lea    0x70(%rsp),%rdi
lea    0x40(%rsp),%rsi
mov    $0x20,%edx
mov    $0x3,%ecx
call   1050 <fn_invFHaarWT2p2_NoaK@plt>
lea    0x308(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x2bd(%rip),%rbx
xor    %ebp,%ebp
nop
mov    0x70(%rsp,%rbp,4),%esi
mov    %rbx,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
add    $0x1,%rbp
cmp    $0x20,%rbp
jne    1e30 <main+0xcb0>
lea    0x314(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
add    $0x198,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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