#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*/ printf(char *, int);
int /*<<< orphan*/ rysujSlimak(int **, int);
int /*<<< orphan*/ sumaPrzekatnych(int **, int);
void wypelnijSlimak(int **slimak, int w, int k, int iteracja, int liczba,
                    int rozmiar) {
  int i, stalaKierunkowa;
  if (iteracja % 2 == 0) {
    k++;
    for (i = 0; i < iteracja; i++) {
      slimak[w][k] = liczba;
      w++;
      liczba++;
    }
    w--;
    for (i = 0; i < iteracja - 1; i++) {
      k--;
      slimak[w][k] = liczba;
      liczba++;
    }
  } else {
    k--;
    for (i = 0; i < iteracja; i++) {
      slimak[w][k] = liczba;
      w--;
      liczba++;
    }
    w++;
    for (i = 0; i < iteracja - 1; i++) {
      k++;
      slimak[w][k] = liczba;
      liczba++;
    }
  }
  rysujSlimak(slimak, rozmiar);
  printf("%d <- iteracja\n", iteracja);
  iteracja++;
  if (iteracja > rozmiar)
    sumaPrzekatnych(slimak, rozmiar);
  else
    wypelnijSlimak(slimak, w, k, iteracja, liczba, rozmiar);
}


x86 assembly (clang, -O0):
<wypelnijSlimak>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    %r9d,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    121f <wypelnijSlimak+0xdf>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11c3 <wypelnijSlimak+0x83>
mov    -0x18(%rbp),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x10(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1181 <wypelnijSlimak+0x41>
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xc(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    121a <wypelnijSlimak+0xda>
mov    -0x10(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x10(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11d3 <wypelnijSlimak+0x93>
jmp    12cd <wypelnijSlimak+0x18d>
mov    -0x10(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x10(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1271 <wypelnijSlimak+0x131>
mov    -0x18(%rbp),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x10(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xc(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    122f <wypelnijSlimak+0xef>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    12c8 <wypelnijSlimak+0x188>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x10(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1281 <wypelnijSlimak+0x141>
jmp    12cd <wypelnijSlimak+0x18d>
mov    -0x8(%rbp),%rdi
mov    -0x1c(%rbp),%esi
call   1050 <rysujSlimak@plt>
mov    -0x14(%rbp),%esi
lea    0xd1d(%rip),%rdi
call   1040 <printf@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jle    130e <wypelnijSlimak+0x1ce>
mov    -0x8(%rbp),%rdi
mov    -0x1c(%rbp),%esi
call   1030 <sumaPrzekatnych@plt>
jmp    1328 <wypelnijSlimak+0x1e8>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%r8d
mov    -0x1c(%rbp),%r9d
call   1060 <wypelnijSlimak@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<wypelnijSlimak>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %r8d,%ebx
mov    %ecx,%r12d
mov    %edx,(%rsp)
mov    %esi,%ebp
mov    %rdi,%r15
lea    -0x1(%r12),%eax
cmp    %ecx,%r9d
mov    %r9d,0x4(%rsp)
cmovg  %r9d,%ecx
mov    %ecx,0x10(%rsp)
lea    -0x2(%r12),%ecx
xor    %r14d,%r14d
movdqa 0xe9f(%rip),%xmm3
movdqa 0xea7(%rip),%xmm4
movdqa 0xeaf(%rip),%xmm5
movdqa 0xeb7(%rip),%xmm6
mov    %rcx,0x30(%rsp)
mov    %ecx,%esi
mov    %rax,0x28(%rsp)
mov    %eax,%r13d
jmp    1202 <wypelnijSlimak+0xd2>
nopw   0x0(%rax,%rax,1)
mov    %edi,%eax
mov    %edi,(%rsp)
mov    %r15,%rdi
mov    0x4(%rsp),%esi
call   1050 <rysujSlimak@plt>
lea    0xe98(%rip),%rdi
mov    %r12d,%esi
call   1040 <printf@plt>
lea    0x1(%r12),%eax
add    $0x1,%r13d
add    $0x1,%r14d
mov    0x14(%rsp),%esi
add    $0x1,%esi
cmp    0x10(%rsp),%r12d
mov    %eax,%r12d
movdqa 0xe2c(%rip),%xmm3
movdqa 0xe34(%rip),%xmm4
movdqa 0xe3c(%rip),%xmm5
movdqa 0xe44(%rip),%xmm6
je     1563 <wypelnijSlimak+0x433>
mov    %esi,%r10d
add    $0x1,%r10
and    $0xfffffffffffffff8,%r10
add    $0xfffffffffffffff8,%r10
shr    $0x3,%r10
add    $0x1,%r10
and    $0xfffffffffffffffe,%r10
mov    %r12d,%eax
and    $0x3,%eax
mov    %r12d,%ecx
and    $0xfffffffc,%ecx
mov    0x30(%rsp),%rdx
add    %r14d,%edx
mov    %rdx,0x18(%rsp)
lea    0x1(%rdx),%r8
mov    %r8,%r11
movabs $0x1fffffff8,%rdx
and    %rdx,%r11
lea    -0x8(%r11),%rdi
mov    %rdi,%r9
shr    $0x3,%r9
add    $0x1,%r9
test   $0x1,%r12b
mov    %esi,0x14(%rsp)
jne    13e0 <wypelnijSlimak+0x2b0>
mov    (%rsp),%edx
add    $0x1,%edx
test   %r12d,%r12d
mov    %edx,(%rsp)
jle    1538 <wypelnijSlimak+0x408>
mov    %rdi,0x8(%rsp)
movslq %edx,%rdi
movslq %ebp,%rbp
cmp    $0x3,%r13d
jb     12ca <wypelnijSlimak+0x19a>
mov    %r8,0x20(%rsp)
nop
mov    (%r15,%rbp,8),%r8
mov    %ebx,(%r8,%rdi,4)
mov    0x8(%r15,%rbp,8),%rsi
lea    0x1(%rbx),%edx
mov    %edx,(%rsi,%rdi,4)
mov    0x10(%r15,%rbp,8),%rdx
lea    0x2(%rbx),%esi
mov    %esi,(%rdx,%rdi,4)
mov    0x18(%r15,%rbp,8),%rdx
lea    0x3(%rbx),%esi
mov    %esi,(%rdx,%rdi,4)
add    $0x4,%rbp
add    $0x4,%ebx
add    $0xfffffffc,%ecx
jne    1290 <wypelnijSlimak+0x160>
mov    0x20(%rsp),%r8
test   $0x3,%r12b
je     12e3 <wypelnijSlimak+0x1b3>
mov    (%r15,%rbp,8),%rcx
mov    %ebx,(%rcx,%rdi,4)
add    $0x1,%rbp
add    $0x1,%ebx
add    $0xffffffff,%eax
jne    12d0 <wypelnijSlimak+0x1a0>
add    $0xffffffff,%ebp
cmp    $0x2,%r12d
jl     11a5 <wypelnijSlimak+0x75>
movslq %ebp,%rax
mov    (%r15,%rax,8),%rax
xor    %ecx,%ecx
cmpl   $0x7,0x18(%rsp)
jb     13c0 <wypelnijSlimak+0x290>
movd   %ebx,%xmm0
pshufd $0x0,%xmm0,%xmm0
paddd  0xceb(%rip),%xmm0
cmpq   $0x0,0x8(%rsp)
je     1548 <wypelnijSlimak+0x418>
lea    (%rax,%rdi,4),%rsi
add    $0xfffffffffffffff0,%rsi
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movdqa %xmm0,%xmm1
paddd  %xmm3,%xmm1
pshufd $0x1b,%xmm0,%xmm2
movdqu %xmm2,(%rsi,%rcx,4)
pshufd $0x1b,%xmm1,%xmm1
movdqu %xmm1,-0x10(%rsi,%rcx,4)
movdqa %xmm0,%xmm1
paddd  %xmm4,%xmm1
movdqa %xmm0,%xmm2
paddd  %xmm5,%xmm2
pshufd $0x1b,%xmm1,%xmm1
movdqu %xmm1,-0x20(%rsi,%rcx,4)
pshufd $0x1b,%xmm2,%xmm1
movdqu %xmm1,-0x30(%rsi,%rcx,4)
paddd  %xmm6,%xmm0
add    $0xfffffffffffffff0,%rcx
add    $0xfffffffffffffffe,%r10
jne    1330 <wypelnijSlimak+0x200>
neg    %rcx
test   $0x1,%r9b
je     13aa <wypelnijSlimak+0x27a>
not    %rcx
add    %rdi,%rcx
pshufd $0x1b,%xmm0,%xmm1
paddd  %xmm3,%xmm0
movdqu %xmm1,-0xc(%rax,%rcx,4)
pshufd $0x1b,%xmm0,%xmm0
movdqu %xmm0,-0x1c(%rax,%rcx,4)
sub    %r11,%rdi
add    %r11d,%ebx
mov    %r11d,%ecx
cmp    %r11,%r8
je     11a0 <wypelnijSlimak+0x70>
nopl   0x0(%rax)
mov    %ebx,-0x4(%rax,%rdi,4)
add    $0xffffffffffffffff,%rdi
add    $0x1,%ebx
add    $0x1,%ecx
cmp    %ecx,%r13d
jne    13c0 <wypelnijSlimak+0x290>
jmp    11a0 <wypelnijSlimak+0x70>
nopl   0x0(%rax,%rax,1)
mov    (%rsp),%esi
add    $0xffffffff,%esi
test   %r12d,%r12d
mov    %esi,(%rsp)
jle    1540 <wypelnijSlimak+0x410>
mov    %rdi,0x8(%rsp)
mov    0x28(%rsp),%rdx
add    %r14d,%edx
movslq %esi,%rdi
movslq %ebp,%rbp
cmp    $0x3,%edx
jb     1444 <wypelnijSlimak+0x314>
nopw   0x0(%rax,%rax,1)
mov    (%r15,%rbp,8),%rdx
mov    %ebx,(%rdx,%rdi,4)
mov    -0x8(%r15,%rbp,8),%rdx
lea    0x1(%rbx),%esi
mov    %esi,(%rdx,%rdi,4)
mov    -0x10(%r15,%rbp,8),%rdx
lea    0x2(%rbx),%esi
mov    %esi,(%rdx,%rdi,4)
mov    -0x18(%r15,%rbp,8),%rdx
lea    0x3(%rbx),%esi
mov    %esi,(%rdx,%rdi,4)
add    $0xfffffffffffffffc,%rbp
add    $0x4,%ebx
add    $0xfffffffc,%ecx
jne    1410 <wypelnijSlimak+0x2e0>
test   $0x3,%r12b
je     1463 <wypelnijSlimak+0x333>
nopw   0x0(%rax,%rax,1)
mov    (%r15,%rbp,8),%rcx
mov    %ebx,(%rcx,%rdi,4)
add    $0xffffffffffffffff,%rbp
add    $0x1,%ebx
add    $0xffffffff,%eax
jne    1450 <wypelnijSlimak+0x320>
add    $0x1,%ebp
cmp    $0x2,%r12d
jl     11a5 <wypelnijSlimak+0x75>
movslq %ebp,%rax
mov    (%r15,%rax,8),%rax
xor    %ecx,%ecx
cmpl   $0x7,0x18(%rsp)
jb     1520 <wypelnijSlimak+0x3f0>
movd   %ebx,%xmm0
pshufd $0x0,%xmm0,%xmm0
paddd  0xb6b(%rip),%xmm0
cmpq   $0x0,0x8(%rsp)
je     1559 <wypelnijSlimak+0x429>
lea    (%rax,%rdi,4),%rsi
add    $0x34,%rsi
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movdqa %xmm0,%xmm1
paddd  %xmm3,%xmm1
movdqu %xmm0,-0x30(%rsi,%rcx,4)
movdqu %xmm1,-0x20(%rsi,%rcx,4)
movdqa %xmm0,%xmm1
paddd  %xmm4,%xmm1
movdqa %xmm0,%xmm2
paddd  %xmm5,%xmm2
movdqu %xmm1,-0x10(%rsi,%rcx,4)
movdqu %xmm2,(%rsi,%rcx,4)
add    $0x10,%rcx
paddd  %xmm6,%xmm0
add    $0xfffffffffffffffe,%r10
jne    14b0 <wypelnijSlimak+0x380>
test   $0x1,%r9b
je     1506 <wypelnijSlimak+0x3d6>
add    %rdi,%rcx
movdqu %xmm0,0x4(%rax,%rcx,4)
paddd  %xmm3,%xmm0
movdqu %xmm0,0x14(%rax,%rcx,4)
add    %r11,%rdi
add    %r11d,%ebx
mov    %r11d,%ecx
cmp    %r11,%r8
je     11a0 <wypelnijSlimak+0x70>
nopl   0x0(%rax,%rax,1)
mov    %ebx,0x4(%rax,%rdi,4)
add    $0x1,%rdi
add    $0x1,%ebx
add    $0x1,%ecx
cmp    %ecx,%r13d
jne    1520 <wypelnijSlimak+0x3f0>
jmp    11a0 <wypelnijSlimak+0x70>
add    $0xffffffff,%ebp
jmp    11a5 <wypelnijSlimak+0x75>
add    $0x1,%ebp
jmp    11a5 <wypelnijSlimak+0x75>
xor    %ecx,%ecx
test   $0x1,%r9b
jne    138a <wypelnijSlimak+0x25a>
jmp    13aa <wypelnijSlimak+0x27a>
xor    %ecx,%ecx
test   $0x1,%r9b
jne    14f3 <wypelnijSlimak+0x3c3>
jmp    1506 <wypelnijSlimak+0x3d6>
mov    %r15,%rdi
mov    0x4(%rsp),%esi
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <sumaPrzekatnych@plt>

LLVM IR (-O0):
@.str = [16 x i8] c"%d <- iteracja\0A\00"
define void @wypelnijSlimak(i32** %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = alloca i32**
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
store i32** %0, i32*** %7
store i32 %1, i32* %8
store i32 %2, i32* %9
store i32 %3, i32* %10
store i32 %4, i32* %11
store i32 %5, i32* %12
%15 = load i32, i32* %10
%16 = srem i32 %15, 2
%17 = icmp eq i32 %16, 0
br i1 %17, label %18, label %68
18: ; preds = %6
%19 = load i32, i32* %9
%20 = add nsw i32 %19, 1
store i32 %20, i32* %9
store i32 0, i32* %13
br label %21
21: ; preds = %39, %18
%22 = load i32, i32* %13
%23 = load i32, i32* %10
%24 = icmp slt i32 %22, %23
br i1 %24, label %25, label %42
25: ; preds = %21
%26 = load i32, i32* %11
%27 = load i32**, i32*** %7
%28 = load i32, i32* %8
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds i32*, i32** %27, i64 %29
%31 = load i32*, i32** %30
%32 = load i32, i32* %9
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds i32, i32* %31, i64 %33
store i32 %26, i32* %34
%35 = load i32, i32* %8
%36 = add nsw i32 %35, 1
store i32 %36, i32* %8
%37 = load i32, i32* %11
%38 = add nsw i32 %37, 1
store i32 %38, i32* %11
br label %39
39: ; preds = %25
%40 = load i32, i32* %13
%41 = add nsw i32 %40, 1
store i32 %41, i32* %13
br label %21
42: ; preds = %21
%43 = load i32, i32* %8
%44 = add nsw i32 %43, -1
store i32 %44, i32* %8
store i32 0, i32* %13
br label %45
45: ; preds = %64, %42
%46 = load i32, i32* %13
%47 = load i32, i32* %10
%48 = sub nsw i32 %47, 1
%49 = icmp slt i32 %46, %48
br i1 %49, label %50, label %67
50: ; preds = %45
%51 = load i32, i32* %9
%52 = add nsw i32 %51, -1
store i32 %52, i32* %9
%53 = load i32, i32* %11
%54 = load i32**, i32*** %7
%55 = load i32, i32* %8
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds i32*, i32** %54, i64 %56
%58 = load i32*, i32** %57
%59 = load i32, i32* %9
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds i32, i32* %58, i64 %60
store i32 %53, i32* %61
%62 = load i32, i32* %11
%63 = add nsw i32 %62, 1
store i32 %63, i32* %11
br label %64
64: ; preds = %50
%65 = load i32, i32* %13
%66 = add nsw i32 %65, 1
store i32 %66, i32* %13
br label %45
67: ; preds = %45
br label %118
68: ; preds = %6
%69 = load i32, i32* %9
%70 = add nsw i32 %69, -1
store i32 %70, i32* %9
store i32 0, i32* %13
br label %71
71: ; preds = %89, %68
%72 = load i32, i32* %13
%73 = load i32, i32* %10
%74 = icmp slt i32 %72, %73
br i1 %74, label %75, label %92
75: ; preds = %71
%76 = load i32, i32* %11
%77 = load i32**, i32*** %7
%78 = load i32, i32* %8
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds i32*, i32** %77, i64 %79
%81 = load i32*, i32** %80
%82 = load i32, i32* %9
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds i32, i32* %81, i64 %83
store i32 %76, i32* %84
%85 = load i32, i32* %8
%86 = add nsw i32 %85, -1
store i32 %86, i32* %8
%87 = load i32, i32* %11
%88 = add nsw i32 %87, 1
store i32 %88, i32* %11
br label %89
89: ; preds = %75
%90 = load i32, i32* %13
%91 = add nsw i32 %90, 1
store i32 %91, i32* %13
br label %71
92: ; preds = %71
%93 = load i32, i32* %8
%94 = add nsw i32 %93, 1
store i32 %94, i32* %8
store i32 0, i32* %13
br label %95
95: ; preds = %114, %92
%96 = load i32, i32* %13
%97 = load i32, i32* %10
%98 = sub nsw i32 %97, 1
%99 = icmp slt i32 %96, %98
br i1 %99, label %100, label %117
100: ; preds = %95
%101 = load i32, i32* %9
%102 = add nsw i32 %101, 1
store i32 %102, i32* %9
%103 = load i32, i32* %11
%104 = load i32**, i32*** %7
%105 = load i32, i32* %8
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds i32*, i32** %104, i64 %106
%108 = load i32*, i32** %107
%109 = load i32, i32* %9
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds i32, i32* %108, i64 %110
store i32 %103, i32* %111
%112 = load i32, i32* %11
%113 = add nsw i32 %112, 1
store i32 %113, i32* %11
br label %114
114: ; preds = %100
%115 = load i32, i32* %13
%116 = add nsw i32 %115, 1
store i32 %116, i32* %13
br label %95
117: ; preds = %95
br label %118
118: ; preds = %117, %67
%119 = load i32**, i32*** %7
%120 = load i32, i32* %12
%121 = call i32 @rysujSlimak(i32** %119, i32 %120)
%122 = load i32, i32* %10
%123 = call i32 @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str, i64 0, i64 0), i32 %122)
%124 = load i32, i32* %10
%125 = add nsw i32 %124, 1
store i32 %125, i32* %10
%126 = load i32, i32* %10
%127 = load i32, i32* %12
%128 = icmp sgt i32 %126, %127
br i1 %128, label %129, label %133
129: ; preds = %118
%130 = load i32**, i32*** %7
%131 = load i32, i32* %12
%132 = call i32 @sumaPrzekatnych(i32** %130, i32 %131)
br label %140
133: ; preds = %118
%134 = load i32**, i32*** %7
%135 = load i32, i32* %8
%136 = load i32, i32* %9
%137 = load i32, i32* %10
%138 = load i32, i32* %11
%139 = load i32, i32* %12
br label %140
140: ; preds = %133, %129
ret void
}

LLVM IR (-O2):
@.str = [16 x i8] c"%d <- iteracja\0A\00"
define void @wypelnijSlimak(i32** %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = add i32 %3, -1
%8 = call i32 @llvm.smax.i32(i32 %5, i32 %3)
%9 = add i32 %3, -2
br label %10
10: ; preds = %321, %6
%11 = phi i32 [ %330, %321 ], [ 0, %6 ]
%12 = phi i32 [ %328, %321 ], [ %7, %6 ]
%13 = phi i32 [ %324, %321 ], [ %1, %6 ]
%14 = phi i32 [ %323, %321 ], [ %2, %6 ]
%15 = phi i32 [ %327, %321 ], [ %3, %6 ]
%16 = phi i32 [ %322, %321 ], [ %4, %6 ]
%17 = add i32 %9, %11
%18 = zext i32 %17 to i64
%19 = add nuw nsw i64 %18, 1
%20 = and i64 %19, 8589934584
%21 = add nsw i64 %20, -8
%22 = lshr exact i64 %21, 3
%23 = add nuw nsw i64 %22, 1
%24 = add i32 %9, %11
%25 = zext i32 %24 to i64
%26 = add nuw nsw i64 %25, 1
%27 = and i64 %26, 8589934584
%28 = add nsw i64 %27, -8
%29 = lshr exact i64 %28, 3
%30 = add nuw nsw i64 %29, 1
%31 = add i32 %7, %11
%32 = add i32 %9, %11
%33 = zext i32 %32 to i64
%34 = add nuw nsw i64 %33, 1
%35 = add i32 %9, %11
%36 = zext i32 %35 to i64
%37 = add nuw nsw i64 %36, 1
%38 = and i32 %15, 1
%39 = icmp eq i32 %38, 0
br i1 %39, label %40, label %182
40: ; preds = %10
%41 = add i32 %14, 1
%42 = icmp sgt i32 %15, 0
br i1 %42, label %45, label %43
43: ; preds = %40
%44 = add nsw i32 %13, -1
br label %321
45: ; preds = %40
%46 = sext i32 %41 to i64
%47 = sext i32 %13 to i64
%48 = and i32 %15, 3
%49 = icmp ult i32 %12, 3
br i1 %49, label %78, label %50
50: ; preds = %45
%51 = and i32 %15, -4
br label %52
52: ; preds = %52, %50
%53 = phi i64 [ %47, %50 ], [ %74, %52 ]
%54 = phi i32 [ %16, %50 ], [ %75, %52 ]
%55 = phi i32 [ 0, %50 ], [ %76, %52 ]
%56 = getelementptr inbounds i32*, i32** %0, i64 %53
%57 = load i32*, i32** %56
%58 = getelementptr inbounds i32, i32* %57, i64 %46
store i32 %54, i32* %58
%59 = add nsw i64 %53, 1
%60 = add nsw i32 %54, 1
%61 = getelementptr inbounds i32*, i32** %0, i64 %59
%62 = load i32*, i32** %61
%63 = getelementptr inbounds i32, i32* %62, i64 %46
store i32 %60, i32* %63
%64 = add nsw i64 %53, 2
%65 = add nsw i32 %54, 2
%66 = getelementptr inbounds i32*, i32** %0, i64 %64
%67 = load i32*, i32** %66
%68 = getelementptr inbounds i32, i32* %67, i64 %46
store i32 %65, i32* %68
%69 = add nsw i64 %53, 3
%70 = add nsw i32 %54, 3
%71 = getelementptr inbounds i32*, i32** %0, i64 %69
%72 = load i32*, i32** %71
%73 = getelementptr inbounds i32, i32* %72, i64 %46
store i32 %70, i32* %73
%74 = add nsw i64 %53, 4
%75 = add nsw i32 %54, 4
%76 = add i32 %55, 4
%77 = icmp eq i32 %76, %51
br i1 %77, label %78, label %52
78: ; preds = %52, %45
%79 = phi i64 [ undef, %45 ], [ %74, %52 ]
%80 = phi i32 [ undef, %45 ], [ %75, %52 ]
%81 = phi i64 [ %47, %45 ], [ %74, %52 ]
%82 = phi i32 [ %16, %45 ], [ %75, %52 ]
%83 = icmp eq i32 %48, 0
br i1 %83, label %95, label %84
84: ; preds = %78, %84
%85 = phi i64 [ %91, %84 ], [ %81, %78 ]
%86 = phi i32 [ %92, %84 ], [ %82, %78 ]
%87 = phi i32 [ %93, %84 ], [ 0, %78 ]
%88 = getelementptr inbounds i32*, i32** %0, i64 %85
%89 = load i32*, i32** %88
%90 = getelementptr inbounds i32, i32* %89, i64 %46
store i32 %86, i32* %90
%91 = add nsw i64 %85, 1
%92 = add nsw i32 %86, 1
%93 = add i32 %87, 1
%94 = icmp eq i32 %93, %48
br i1 %94, label %95, label %84
95: ; preds = %84, %78
%96 = phi i64 [ %79, %78 ], [ %91, %84 ]
%97 = phi i32 [ %80, %78 ], [ %92, %84 ]
%98 = trunc i64 %96 to i32
%99 = add nsw i32 %98, -1
%100 = icmp sgt i32 %15, 1
br i1 %100, label %101, label %321
101: ; preds = %95
%102 = sext i32 %99 to i64
%103 = getelementptr inbounds i32*, i32** %0, i64 %102
%104 = load i32*, i32** %103
%105 = sext i32 %41 to i64
%106 = icmp ult i32 %35, 7
br i1 %106, label %169, label %107
107: ; preds = %101
%108 = and i64 %37, 8589934584
%109 = sub nsw i64 %105, %108
%110 = trunc i64 %108 to i32
%111 = trunc i64 %108 to i32
%112 = add i32 %97, %111
%113 = insertelement <4 x i32> poison, i32 %97, i64 0
%114 = shufflevector <4 x i32> %113, <4 x i32> poison, <4 x i32> zeroinitializer
%115 = add <4 x i32> %114, <i32 0, i32 1, i32 2, i32 3>
%116 = and i64 %23, 1
%117 = icmp eq i64 %21, 0
br i1 %117, label %151, label %118
118: ; preds = %107
%119 = and i64 %23, 4611686018427387902
br label %120
120: ; preds = %120, %118
%121 = phi i64 [ 0, %118 ], [ %147, %120 ]
%122 = phi <4 x i32> [ %115, %118 ], [ %148, %120 ]
%123 = phi i64 [ 0, %118 ], [ %149, %120 ]
%124 = add <4 x i32> %122, <i32 4, i32 4, i32 4, i32 4>
%125 = xor i64 %121, -1
%126 = add i64 %125, %105
%127 = getelementptr inbounds i32, i32* %104, i64 %126
%128 = shufflevector <4 x i32> %122, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%129 = getelementptr inbounds i32, i32* %127, i64 -3
%130 = bitcast i32* %129 to <4 x i32>*
store <4 x i32> %128, <4 x i32>* %130
%131 = shufflevector <4 x i32> %124, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%132 = getelementptr inbounds i32, i32* %127, i64 -4
%133 = getelementptr inbounds i32, i32* %132, i64 -3
%134 = bitcast i32* %133 to <4 x i32>*
store <4 x i32> %131, <4 x i32>* %134
%135 = add <4 x i32> %122, <i32 8, i32 8, i32 8, i32 8>
%136 = add <4 x i32> %122, <i32 12, i32 12, i32 12, i32 12>
%137 = sub nuw nsw i64 -9, %121
%138 = add i64 %137, %105
%139 = getelementptr inbounds i32, i32* %104, i64 %138
%140 = shufflevector <4 x i32> %135, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%141 = getelementptr inbounds i32, i32* %139, i64 -3
%142 = bitcast i32* %141 to <4 x i32>*
store <4 x i32> %140, <4 x i32>* %142
%143 = shufflevector <4 x i32> %136, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%144 = getelementptr inbounds i32, i32* %139, i64 -4
%145 = getelementptr inbounds i32, i32* %144, i64 -3
%146 = bitcast i32* %145 to <4 x i32>*
store <4 x i32> %143, <4 x i32>* %146
%147 = add nuw i64 %121, 16
%148 = add <4 x i32> %122, <i32 16, i32 16, i32 16, i32 16>
%149 = add i64 %123, 2
%150 = icmp eq i64 %149, %119
br i1 %150, label %151, label %120
151: ; preds = %120, %107
%152 = phi i64 [ 0, %107 ], [ %147, %120 ]
%153 = phi <4 x i32> [ %115, %107 ], [ %148, %120 ]
%154 = icmp eq i64 %116, 0
br i1 %154, label %167, label %155
155: ; preds = %151
%156 = add <4 x i32> %153, <i32 4, i32 4, i32 4, i32 4>
%157 = xor i64 %152, -1
%158 = add i64 %157, %105
%159 = getelementptr inbounds i32, i32* %104, i64 %158
%160 = shufflevector <4 x i32> %153, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%161 = getelementptr inbounds i32, i32* %159, i64 -3
%162 = bitcast i32* %161 to <4 x i32>*
store <4 x i32> %160, <4 x i32>* %162
%163 = shufflevector <4 x i32> %156, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%164 = getelementptr inbounds i32, i32* %159, i64 -4
%165 = getelementptr inbounds i32, i32* %164, i64 -3
%166 = bitcast i32* %165 to <4 x i32>*
store <4 x i32> %163, <4 x i32>* %166
br label %167
167: ; preds = %151, %155
%168 = icmp eq i64 %37, %108
br i1 %168, label %313, label %169
169: ; preds = %101, %167
%170 = phi i64 [ %105, %101 ], [ %109, %167 ]
%171 = phi i32 [ 0, %101 ], [ %110, %167 ]
%172 = phi i32 [ %97, %101 ], [ %112, %167 ]
br label %173
173: ; preds = %169, %173
%174 = phi i64 [ %177, %173 ], [ %170, %169 ]
%175 = phi i32 [ %180, %173 ], [ %171, %169 ]
%176 = phi i32 [ %179, %173 ], [ %172, %169 ]
%177 = add nsw i64 %174, -1
%178 = getelementptr inbounds i32, i32* %104, i64 %177
store i32 %176, i32* %178
%179 = add nsw i32 %176, 1
%180 = add nuw nsw i32 %175, 1
%181 = icmp eq i32 %180, %12
br i1 %181, label %313, label %173
182: ; preds = %10
%183 = add i32 %14, -1
%184 = icmp sgt i32 %15, 0
br i1 %184, label %187, label %185
185: ; preds = %182
%186 = add nsw i32 %13, 1
br label %321
187: ; preds = %182
%188 = sext i32 %183 to i64
%189 = sext i32 %13 to i64
%190 = and i32 %15, 3
%191 = icmp ult i32 %31, 3
br i1 %191, label %220, label %192
192: ; preds = %187
%193 = and i32 %15, -4
br label %194
194: ; preds = %194, %192
%195 = phi i64 [ %189, %192 ], [ %216, %194 ]
%196 = phi i32 [ %16, %192 ], [ %217, %194 ]
%197 = phi i32 [ 0, %192 ], [ %218, %194 ]
%198 = getelementptr inbounds i32*, i32** %0, i64 %195
%199 = load i32*, i32** %198
%200 = getelementptr inbounds i32, i32* %199, i64 %188
store i32 %196, i32* %200
%201 = add nsw i64 %195, -1
%202 = add nsw i32 %196, 1
%203 = getelementptr inbounds i32*, i32** %0, i64 %201
%204 = load i32*, i32** %203
%205 = getelementptr inbounds i32, i32* %204, i64 %188
store i32 %202, i32* %205
%206 = add nsw i64 %195, -2
%207 = add nsw i32 %196, 2
%208 = getelementptr inbounds i32*, i32** %0, i64 %206
%209 = load i32*, i32** %208
%210 = getelementptr inbounds i32, i32* %209, i64 %188
store i32 %207, i32* %210
%211 = add nsw i64 %195, -3
%212 = add nsw i32 %196, 3
%213 = getelementptr inbounds i32*, i32** %0, i64 %211
%214 = load i32*, i32** %213
%215 = getelementptr inbounds i32, i32* %214, i64 %188
store i32 %212, i32* %215
%216 = add nsw i64 %195, -4
%217 = add nsw i32 %196, 4
%218 = add i32 %197, 4
%219 = icmp eq i32 %218, %193
br i1 %219, label %220, label %194
220: ; preds = %194, %187
%221 = phi i64 [ undef, %187 ], [ %216, %194 ]
%222 = phi i32 [ undef, %187 ], [ %217, %194 ]
%223 = phi i64 [ %189, %187 ], [ %216, %194 ]
%224 = phi i32 [ %16, %187 ], [ %217, %194 ]
%225 = icmp eq i32 %190, 0
br i1 %225, label %237, label %226
226: ; preds = %220, %226
%227 = phi i64 [ %233, %226 ], [ %223, %220 ]
%228 = phi i32 [ %234, %226 ], [ %224, %220 ]
%229 = phi i32 [ %235, %226 ], [ 0, %220 ]
%230 = getelementptr inbounds i32*, i32** %0, i64 %227
%231 = load i32*, i32** %230
%232 = getelementptr inbounds i32, i32* %231, i64 %188
store i32 %228, i32* %232
%233 = add nsw i64 %227, -1
%234 = add nsw i32 %228, 1
%235 = add i32 %229, 1
%236 = icmp eq i32 %235, %190
br i1 %236, label %237, label %226
237: ; preds = %226, %220
%238 = phi i64 [ %221, %220 ], [ %233, %226 ]
%239 = phi i32 [ %222, %220 ], [ %234, %226 ]
%240 = trunc i64 %238 to i32
%241 = add nsw i32 %240, 1
%242 = icmp sgt i32 %15, 1
br i1 %242, label %243, label %321
243: ; preds = %237
%244 = sext i32 %241 to i64
%245 = getelementptr inbounds i32*, i32** %0, i64 %244
%246 = load i32*, i32** %245
%247 = sext i32 %183 to i64
%248 = icmp ult i32 %32, 7
br i1 %248, label %300, label %249
249: ; preds = %243
%250 = and i64 %34, 8589934584
%251 = add nsw i64 %250, %247
%252 = trunc i64 %250 to i32
%253 = trunc i64 %250 to i32
%254 = add i32 %239, %253
%255 = insertelement <4 x i32> poison, i32 %239, i64 0
%256 = shufflevector <4 x i32> %255, <4 x i32> poison, <4 x i32> zeroinitializer
%257 = add <4 x i32> %256, <i32 0, i32 1, i32 2, i32 3>
%258 = and i64 %30, 1
%259 = icmp eq i64 %28, 0
br i1 %259, label %286, label %260
260: ; preds = %249
%261 = and i64 %30, 4611686018427387902
br label %262
262: ; preds = %262, %260
%263 = phi i64 [ 0, %260 ], [ %282, %262 ]
%264 = phi <4 x i32> [ %257, %260 ], [ %283, %262 ]
%265 = phi i64 [ 0, %260 ], [ %284, %262 ]
%266 = add i64 %263, %247
%267 = add <4 x i32> %264, <i32 4, i32 4, i32 4, i32 4>
%268 = add nsw i64 %266, 1
%269 = getelementptr inbounds i32, i32* %246, i64 %268
%270 = bitcast i32* %269 to <4 x i32>*
store <4 x i32> %264, <4 x i32>* %270
%271 = getelementptr inbounds i32, i32* %269, i64 4
%272 = bitcast i32* %271 to <4 x i32>*
store <4 x i32> %267, <4 x i32>* %272
%273 = or i64 %263, 8
%274 = add <4 x i32> %264, <i32 8, i32 8, i32 8, i32 8>
%275 = add i64 %273, %247
%276 = add <4 x i32> %264, <i32 12, i32 12, i32 12, i32 12>
%277 = add nsw i64 %275, 1
%278 = getelementptr inbounds i32, i32* %246, i64 %277
%279 = bitcast i32* %278 to <4 x i32>*
store <4 x i32> %274, <4 x i32>* %279
%280 = getelementptr inbounds i32, i32* %278, i64 4
%281 = bitcast i32* %280 to <4 x i32>*
store <4 x i32> %276, <4 x i32>* %281
%282 = add nuw i64 %263, 16
%283 = add <4 x i32> %264, <i32 16, i32 16, i32 16, i32 16>
%284 = add i64 %265, 2
%285 = icmp eq i64 %284, %261
br i1 %285, label %286, label %262
286: ; preds = %262, %249
%287 = phi i64 [ 0, %249 ], [ %282, %262 ]
%288 = phi <4 x i32> [ %257, %249 ], [ %283, %262 ]
%289 = icmp eq i64 %258, 0
br i1 %289, label %298, label %290
290: ; preds = %286
%291 = add i64 %287, %247
%292 = add <4 x i32> %288, <i32 4, i32 4, i32 4, i32 4>
%293 = add nsw i64 %291, 1
%294 = getelementptr inbounds i32, i32* %246, i64 %293
%295 = bitcast i32* %294 to <4 x i32>*
store <4 x i32> %288, <4 x i32>* %295
%296 = getelementptr inbounds i32, i32* %294, i64 4
%297 = bitcast i32* %296 to <4 x i32>*
store <4 x i32> %292, <4 x i32>* %297
br label %298
298: ; preds = %286, %290
%299 = icmp eq i64 %34, %250
br i1 %299, label %317, label %300
300: ; preds = %243, %298
%301 = phi i64 [ %247, %243 ], [ %251, %298 ]
%302 = phi i32 [ 0, %243 ], [ %252, %298 ]
%303 = phi i32 [ %239, %243 ], [ %254, %298 ]
br label %304
304: ; preds = %300, %304
%305 = phi i64 [ %308, %304 ], [ %301, %300 ]
%306 = phi i32 [ %311, %304 ], [ %302, %300 ]
%307 = phi i32 [ %310, %304 ], [ %303, %300 ]
%308 = add nsw i64 %305, 1
%309 = getelementptr inbounds i32, i32* %246, i64 %308
store i32 %307, i32* %309
%310 = add nsw i32 %307, 1
%311 = add nuw nsw i32 %306, 1
%312 = icmp eq i32 %311, %12
br i1 %312, label %317, label %304
313: ; preds = %173, %167
%314 = phi i64 [ %109, %167 ], [ %177, %173 ]
%315 = phi i32 [ %112, %167 ], [ %179, %173 ]
%316 = trunc i64 %314 to i32
br label %321
317: ; preds = %304, %298
%318 = phi i64 [ %251, %298 ], [ %308, %304 ]
%319 = phi i32 [ %254, %298 ], [ %310, %304 ]
%320 = trunc i64 %318 to i32
br label %321
321: ; preds = %185, %43, %317, %313, %237, %95
%322 = phi i32 [ %97, %95 ], [ %239, %237 ], [ %315, %313 ], [ %319, %317 ], [ %16, %43 ], [ %16, %185 ]
%323 = phi i32 [ %41, %95 ], [ %183, %237 ], [ %316, %313 ], [ %320, %317 ], [ %41, %43 ], [ %183, %185 ]
%324 = phi i32 [ %99, %95 ], [ %241, %237 ], [ %99, %313 ], [ %241, %317 ], [ %44, %43 ], [ %186, %185 ]
%325 = tail call i32 @rysujSlimak(i32** %0, i32 %5)
%326 = tail call i32 @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str, i64 0, i64 0), i32 %15)
%327 = add i32 %15, 1
%328 = add i32 %12, 1
%329 = icmp eq i32 %15, %8
%330 = add i32 %11, 1
br i1 %329, label %331, label %10
331: ; preds = %321
%332 = tail call i32 @sumaPrzekatnych(i32** %0, i32 %5)
ret void
}