#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*/ sposta(int *, int *);
scalar_t__ ultimo(char **, int);
scalar_t__ verifica_somma(char **, int);
int aggiungi(char **m, int r, int c, int n, int *preso) {
  while (c >= 0 && m[r][c] != '_')
    sposta(&r, &c);
  if (c < 0) {
    if (verifica_somma(m, n))
      return 1;
    return 0;
  }
  if (ultimo(m, c)) {
    int i, x;
    for (i = 0; i < 2; i++) {
      if (r == 1 && i == 0)
        x = m[3][c] - m[0][c] - m[2][c] + '0';
      if (r == 1 && i == 1)
        x = 10 + m[3][c] - m[0][c] - m[2][c] + '0';
      if (r == 2 && i == 0)
        x = m[3][c] - m[0][c] - m[1][c] + '0';
      if (r == 2 && i == 1)
        x = 10 + m[3][c] - m[0][c] - m[1][c] + '0';
      if (r == 3 && i == 0)
        x = m[0][c] + m[1][c] + m[2][c] - 3 * '0';
      if (r == 3 && i == 1)
        x = (m[0][c] + m[1][c] + m[2][c] - 3 * '0') % 10;
      if (x > 0 && x < 10 && !preso[x]) {
        if (i == 1 && c == 0)
          return 0;
        preso[x] = 1;
        m[r][c] = '0' + x;
        if (i == 1 && c > 0)
          m[0][c - 1] = '1';
        if (aggiungi(m, r, c, n, preso) == 1)
          return 1;
        else {
          preso[x] = 0;
          m[r][c] = '_';
          if (i == 1)
            m[0][c - 1] = '0';
        }
      }
    }
    return 0;
  } else {
    int i;
    for (i = 1; i < 10; i++) {
      if (!preso[i]) {
        preso[i] = 1;
        m[r][c] = '0' + i;
        if (aggiungi(m, r, c, n, preso) == 1)
          return 1;
        else {
          preso[i] = 0;
          m[r][c] = '_';
        }
      }
    }
    return 0;
  }
}


x86 assembly (clang, -O0):
<aggiungi>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8,-0x28(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x18(%rbp)
mov    %al,-0x35(%rbp)
jl     1185 <aggiungi+0x45>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5f,%eax
setne  %al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
test   $0x1,%al
jne    1195 <aggiungi+0x55>
jmp    11a7 <aggiungi+0x67>
lea    -0x14(%rbp),%rdi
lea    -0x18(%rbp),%rsi
call   1030 <sposta@plt>
jmp    1159 <aggiungi+0x19>
cmpl   $0x0,-0x18(%rbp)
jge    11df <aggiungi+0x9f>
mov    -0x10(%rbp),%rdi
mov    -0x1c(%rbp),%esi
call   1050 <verifica_somma@plt>
cmp    $0x0,%rax
je     11d3 <aggiungi+0x93>
movl   $0x1,-0x4(%rbp)
jmp    15cd <aggiungi+0x48d>
movl   $0x0,-0x4(%rbp)
jmp    15cd <aggiungi+0x48d>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%esi
call   1060 <ultimo@plt>
cmp    $0x0,%rax
je     1513 <aggiungi+0x3d3>
movl   $0x0,-0x2c(%rbp)
cmpl   $0x2,-0x2c(%rbp)
jge    1507 <aggiungi+0x3c7>
cmpl   $0x1,-0x14(%rbp)
jne    1253 <aggiungi+0x113>
cmpl   $0x0,-0x2c(%rbp)
jne    1253 <aggiungi+0x113>
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x10(%rbp),%rcx
mov    (%rcx),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
mov    -0x10(%rbp),%rcx
mov    0x10(%rcx),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
add    $0x30,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x1,-0x14(%rbp)
jne    12a3 <aggiungi+0x163>
cmpl   $0x1,-0x2c(%rbp)
jne    12a3 <aggiungi+0x163>
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
add    $0xa,%eax
mov    -0x10(%rbp),%rcx
mov    (%rcx),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
mov    -0x10(%rbp),%rcx
mov    0x10(%rcx),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
add    $0x30,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x2,-0x14(%rbp)
jne    12f0 <aggiungi+0x1b0>
cmpl   $0x0,-0x2c(%rbp)
jne    12f0 <aggiungi+0x1b0>
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x10(%rbp),%rcx
mov    (%rcx),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
mov    -0x10(%rbp),%rcx
mov    0x8(%rcx),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
add    $0x30,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x2,-0x14(%rbp)
jne    1340 <aggiungi+0x200>
cmpl   $0x1,-0x2c(%rbp)
jne    1340 <aggiungi+0x200>
mov    -0x10(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
add    $0xa,%eax
mov    -0x10(%rbp),%rcx
mov    (%rcx),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
mov    -0x10(%rbp),%rcx
mov    0x8(%rcx),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
sub    %ecx,%eax
add    $0x30,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x3,-0x14(%rbp)
jne    138f <aggiungi+0x24f>
cmpl   $0x0,-0x2c(%rbp)
jne    138f <aggiungi+0x24f>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x10(%rbp),%rcx
mov    0x8(%rcx),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
mov    0x10(%rcx),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
sub    $0x90,%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x3,-0x14(%rbp)
jne    13e6 <aggiungi+0x2a6>
cmpl   $0x1,-0x2c(%rbp)
jne    13e6 <aggiungi+0x2a6>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movslq -0x18(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x10(%rbp),%rcx
mov    0x8(%rcx),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
mov    0x10(%rcx),%rcx
movslq -0x18(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
add    %ecx,%eax
sub    $0x90,%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
jle    14f4 <aggiungi+0x3b4>
cmpl   $0xa,-0x30(%rbp)
jge    14f4 <aggiungi+0x3b4>
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    14f4 <aggiungi+0x3b4>
cmpl   $0x1,-0x2c(%rbp)
jne    142c <aggiungi+0x2ec>
cmpl   $0x0,-0x18(%rbp)
jne    142c <aggiungi+0x2ec>
movl   $0x0,-0x4(%rbp)
jmp    15cd <aggiungi+0x48d>
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
add    $0x30,%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
cmpl   $0x1,-0x2c(%rbp)
jne    147e <aggiungi+0x33e>
cmpl   $0x0,-0x18(%rbp)
jle    147e <aggiungi+0x33e>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x31,(%rax,%rcx,1)
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x1c(%rbp),%ecx
mov    -0x28(%rbp),%r8
call   1040 <aggiungi@plt>
cmp    $0x1,%eax
jne    14a9 <aggiungi+0x369>
movl   $0x1,-0x4(%rbp)
jmp    15cd <aggiungi+0x48d>
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movb   $0x5f,(%rax,%rcx,1)
cmpl   $0x1,-0x2c(%rbp)
jne    14ea <aggiungi+0x3aa>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x30,(%rax,%rcx,1)
jmp    14ef <aggiungi+0x3af>
jmp    14f4 <aggiungi+0x3b4>
jmp    14f9 <aggiungi+0x3b9>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11fc <aggiungi+0xbc>
movl   $0x0,-0x4(%rbp)
jmp    15cd <aggiungi+0x48d>
movl   $0x1,-0x34(%rbp)
cmpl   $0xa,-0x34(%rbp)
jge    15c6 <aggiungi+0x486>
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    15b3 <aggiungi+0x473>
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x30,%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x1c(%rbp),%ecx
mov    -0x28(%rbp),%r8
call   1040 <aggiungi@plt>
cmp    $0x1,%eax
jne    158b <aggiungi+0x44b>
movl   $0x1,-0x4(%rbp)
jmp    15cd <aggiungi+0x48d>
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x18(%rbp),%rcx
movb   $0x5f,(%rax,%rcx,1)
jmp    15b3 <aggiungi+0x473>
jmp    15b8 <aggiungi+0x478>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    151a <aggiungi+0x3da>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<aggiungi>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %ecx,%ebp
mov    %rdi,%r13
mov    %esi,0x10(%rsp)
mov    %edx,0xc(%rsp)
test   %edx,%edx
js     1402 <aggiungi+0x2c2>
mov    %r8,%r15
movslq %esi,%rax
mov    0x0(%r13,%rax,8),%rax
mov    %edx,%ecx
cmpb   $0x5f,(%rax,%rcx,1)
je     11a7 <aggiungi+0x67>
lea    0x10(%rsp),%r12
lea    0xc(%rsp),%rbx
mov    %r12,%rdi
mov    %rbx,%rsi
call   1030 <sposta@plt>
mov    0xc(%rsp),%edx
test   %edx,%edx
js     1402 <aggiungi+0x2c2>
movslq 0x10(%rsp),%rax
mov    0x0(%r13,%rax,8),%rax
cmpb   $0x5f,(%rax,%rdx,1)
jne    1180 <aggiungi+0x40>
mov    %r13,%rdi
mov    %edx,%esi
call   1060 <ultimo@plt>
test   %rax,%rax
je     1419 <aggiungi+0x2d9>
mov    %ebp,0x14(%rsp)
mov    $0x1,%r12b
xor    %ebx,%ebx
jmp    11e4 <aggiungi+0xa4>
cs nopw 0x0(%rax,%rax,1)
nop
xor    %eax,%eax
mov    $0x1,%bl
test   $0x1,%r12b
mov    $0x0,%r12d
je     148e <aggiungi+0x34e>
movslq 0x10(%rsp),%r8
cmp    $0x1,%r8
sete   %cl
and    %r12b,%cl
cmp    $0x1,%cl
jne    1210 <aggiungi+0xd0>
movslq 0xc(%rsp),%rdx
mov    0x18(%r13),%rsi
add    %rdx,%rsi
mov    $0x30,%edi
jmp    1236 <aggiungi+0xf6>
nopl   0x0(%rax,%rax,1)
cmp    $0x1,%r8d
setne  %dl
mov    %ebx,%eax
not    %al
or     %dl,%al
test   $0x1,%al
jne    1360 <aggiungi+0x220>
movslq 0xc(%rsp),%rdx
mov    0x18(%r13),%rsi
add    %rdx,%rsi
mov    $0x3a,%edi
xor    $0x1,%cl
movsbl (%rsi),%ebp
add    %edi,%ebp
mov    0x0(%r13),%rax
mov    0x10(%r13),%rsi
movsbl (%rax,%rdx,1),%eax
movsbl (%rsi,%rdx,1),%edx
add    %eax,%edx
sub    %edx,%ebp
xor    %edx,%edx
mov    %ecx,%ebx
test   %dl,%dl
je     12a2 <aggiungi+0x162>
test   $0x1,%bl
je     12a2 <aggiungi+0x162>
movslq 0xc(%rsp),%rax
mov    0x0(%r13),%rcx
mov    0x8(%r13),%rdx
movsbl (%rcx,%rax,1),%ecx
movsbl (%rdx,%rax,1),%edx
add    %ecx,%edx
mov    0x10(%r13),%rcx
movsbl (%rcx,%rax,1),%eax
add    %edx,%eax
add    $0xffffff70,%eax
movswl %ax,%ecx
imul   $0x6667,%ecx,%ecx
mov    %ecx,%edx
shr    $0x1f,%edx
sar    $0x12,%ecx
add    %edx,%ecx
add    %ecx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
movswl %ax,%ebp
lea    -0x1(%rbp),%eax
cmp    $0x8,%eax
ja     11d0 <aggiungi+0x90>
mov    %ebp,%r14d
cmpl   $0x0,(%r15,%r14,4)
jne    11d0 <aggiungi+0x90>
movslq 0xc(%rsp),%rcx
test   %rcx,%rcx
sete   %al
test   %al,%bl
jne    1485 <aggiungi+0x345>
movl   $0x1,(%r15,%r14,4)
lea    0x30(%rbp),%eax
mov    0x0(%r13,%r8,8),%rdx
mov    %al,(%rdx,%rcx,1)
mov    0xc(%rsp),%edx
test   %edx,%edx
setg   %al
and    %bl,%al
cmp    $0x1,%al
jne    1300 <aggiungi+0x1c0>
mov    0x0(%r13),%rax
add    $0xffffffff,%edx
movb   $0x31,(%rax,%rdx,1)
mov    0xc(%rsp),%edx
mov    0x10(%rsp),%esi
mov    %r13,%rdi
mov    0x14(%rsp),%ecx
mov    %r15,%r8
call   1040 <aggiungi@plt>
cmp    $0x1,%eax
je     1489 <aggiungi+0x349>
movl   $0x0,(%r15,%r14,4)
movslq 0x10(%rsp),%rax
mov    0x0(%r13,%rax,8),%rax
movslq 0xc(%rsp),%rcx
movb   $0x5f,(%rax,%rcx,1)
test   $0x1,%bl
je     11d0 <aggiungi+0x90>
mov    0x0(%r13),%rax
movslq 0xc(%rsp),%rcx
movb   $0x30,-0x1(%rcx,%rax,1)
jmp    11d0 <aggiungi+0x90>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmp    $0x2,%r8d
sete   %cl
mov    %ecx,%eax
and    %r12b,%al
cmp    $0x1,%al
jne    1396 <aggiungi+0x256>
mov    0x18(%r13),%rax
movslq 0xc(%rsp),%rcx
movsbl (%rax,%rcx,1),%ebp
mov    0x0(%r13),%rax
mov    0x8(%r13),%rdx
movsbl (%rax,%rcx,1),%eax
movsbl (%rdx,%rcx,1),%ecx
add    %eax,%ecx
sub    %ecx,%ebp
add    $0x30,%ebp
mov    $0x1,%cl
and    %bl,%cl
cmp    $0x1,%cl
jne    13c1 <aggiungi+0x281>
mov    0x18(%r13),%rax
movslq 0xc(%rsp),%rcx
movsbl (%rax,%rcx,1),%ebp
mov    0x0(%r13),%rax
mov    0x8(%r13),%rdx
movsbl (%rax,%rcx,1),%eax
movsbl (%rdx,%rcx,1),%ecx
add    %eax,%ecx
sub    %ecx,%ebp
add    $0x3a,%ebp
cmp    $0x3,%r8d
sete   %dl
mov    %edx,%eax
and    %r12b,%al
cmp    $0x1,%al
jne    1256 <aggiungi+0x116>
movslq 0xc(%rsp),%rax
mov    0x0(%r13),%rcx
mov    0x8(%r13),%rsi
movsbl (%rcx,%rax,1),%ecx
movsbl (%rsi,%rax,1),%esi
add    %ecx,%esi
mov    0x10(%r13),%rcx
movsbl (%rcx,%rax,1),%eax
lea    (%rax,%rsi,1),%ebp
add    $0xffffff70,%ebp
jmp    1256 <aggiungi+0x116>
mov    %r13,%rdi
mov    %ebp,%esi
call   1050 <verifica_somma@plt>
mov    %rax,%rcx
xor    %eax,%eax
test   %rcx,%rcx
setne  %al
jmp    148e <aggiungi+0x34e>
mov    $0x1,%ebx
jmp    142a <aggiungi+0x2ea>
add    $0x1,%rbx
cmp    $0xa,%rbx
je     1485 <aggiungi+0x345>
cmpl   $0x0,(%r15,%rbx,4)
jne    1420 <aggiungi+0x2e0>
movl   $0x1,(%r15,%rbx,4)
movslq 0x10(%rsp),%rax
mov    0x0(%r13,%rax,8),%rax
movslq 0xc(%rsp),%rcx
lea    0x30(%rbx),%edx
mov    %dl,(%rax,%rcx,1)
mov    0x10(%rsp),%esi
mov    0xc(%rsp),%edx
mov    %r13,%rdi
mov    %ebp,%ecx
mov    %r15,%r8
call   1040 <aggiungi@plt>
cmp    $0x1,%eax
je     1489 <aggiungi+0x349>
movl   $0x0,(%r15,%rbx,4)
movslq 0x10(%rsp),%rax
mov    0x0(%r13,%rax,8),%rax
movslq 0xc(%rsp),%rcx
movb   $0x5f,(%rax,%rcx,1)
jmp    1420 <aggiungi+0x2e0>
xor    %eax,%eax
jmp    148e <aggiungi+0x34e>
mov    $0x1,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @aggiungi(i8** %0, i32 %1, i32 %2, i32 %3, i32* %4) {
%6 = alloca i32
%7 = alloca i32
store i32 %1, i32* %6
store i32 %2, i32* %7
%8 = icmp sgt i32 %2, -1
br i1 %8, label %9, label %30
9: ; preds = %5
%10 = sext i32 %1 to i64
%11 = getelementptr inbounds i8*, i8** %0, i64 %10
%12 = load i8*, i8** %11
%13 = zext i32 %2 to i64
%14 = getelementptr inbounds i8, i8* %12, i64 %13
%15 = load i8, i8* %14
%16 = icmp eq i8 %15, 95
br i1 %16, label %34, label %17
17: ; preds = %9, %21
%18 = call i32 @sposta(i32* %6, i32* %7)
%19 = load i32, i32* %7
%20 = icmp sgt i32 %19, -1
br i1 %20, label %21, label %30
21: ; preds = %17
%22 = load i32, i32* %6
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds i8*, i8** %0, i64 %23
%25 = load i8*, i8** %24
%26 = zext i32 %19 to i64
%27 = getelementptr inbounds i8, i8* %25, i64 %26
%28 = load i8, i8* %27
%29 = icmp eq i8 %28, 95
br i1 %29, label %34, label %17
30: ; preds = %17, %5
%31 = call i64 @verifica_somma(i8** %0, i32 %3)
%32 = icmp ne i64 %31, 0
%33 = zext i1 %32 to i32
br label %249
34: ; preds = %21, %9
%35 = phi i32 [ %2, %9 ], [ %19, %21 ]
%36 = call i64 @ultimo(i8** %0, i32 %35)
%37 = icmp eq i64 %36, 0
br i1 %37, label %219, label %38
38: ; preds = %34
%39 = getelementptr inbounds i8*, i8** %0, i64 3
%40 = getelementptr inbounds i8*, i8** %0, i64 1
%41 = getelementptr inbounds i8*, i8** %0, i64 2
br label %42
42: ; preds = %38, %218
%43 = phi i32 [ undef, %38 ], [ %170, %218 ]
%44 = phi i1 [ true, %38 ], [ false, %218 ]
%45 = phi i1 [ false, %38 ], [ true, %218 ]
%46 = load i32, i32* %6
%47 = icmp eq i32 %46, 1
%48 = and i1 %47, %44
br i1 %48, label %49, label %54
49: ; preds = %42
%50 = load i8*, i8** %39
%51 = load i32, i32* %7
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds i8, i8* %50, i64 %52
br label %82
54: ; preds = %42
%55 = and i1 %47, %45
br i1 %55, label %56, label %61
56: ; preds = %54
%57 = load i8*, i8** %39
%58 = load i32, i32* %7
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds i8, i8* %57, i64 %59
br label %82
61: ; preds = %54
%62 = icmp eq i32 %46, 2
%63 = and i1 %62, %44
br i1 %63, label %64, label %100
64: ; preds = %61
%65 = load i8*, i8** %39
%66 = load i32, i32* %7
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds i8, i8* %65, i64 %67
%69 = load i8, i8* %68
%70 = sext i8 %69 to i32
%71 = load i8*, i8** %0
%72 = getelementptr inbounds i8, i8* %71, i64 %67
%73 = load i8, i8* %72
%74 = sext i8 %73 to i32
%75 = load i8*, i8** %40
%76 = getelementptr inbounds i8, i8* %75, i64 %67
%77 = load i8, i8* %76
%78 = sext i8 %77 to i32
%79 = add nsw i32 %70, 48
%80 = add nsw i32 %74, %78
%81 = sub nsw i32 %79, %80
br label %100
82: ; preds = %56, %49
%83 = phi i8* [ %60, %56 ], [ %53, %49 ]
%84 = phi i64 [ %59, %56 ], [ %52, %49 ]
%85 = phi i32 [ 58, %56 ], [ 48, %49 ]
%86 = xor i1 %48, true
%87 = load i8, i8* %83
%88 = sext i8 %87 to i32
%89 = load i8*, i8** %0
%90 = getelementptr inbounds i8, i8* %89, i64 %84
%91 = load i8, i8* %90
%92 = sext i8 %91 to i32
%93 = load i8*, i8** %41
%94 = getelementptr inbounds i8, i8* %93, i64 %84
%95 = load i8, i8* %94
%96 = sext i8 %95 to i32
%97 = add nsw i32 %85, %88
%98 = add nsw i32 %92, %96
%99 = sub nsw i32 %97, %98
br label %144
100: ; preds = %64, %61
%101 = phi i1 [ true, %64 ], [ %62, %61 ]
%102 = phi i32 [ %81, %64 ], [ %43, %61 ]
%103 = and i1 %101, %45
br i1 %103, label %104, label %122
104: ; preds = %100
%105 = load i8*, i8** %39
%106 = load i32, i32* %7
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds i8, i8* %105, i64 %107
%109 = load i8, i8* %108
%110 = sext i8 %109 to i32
%111 = load i8*, i8** %0
%112 = getelementptr inbounds i8, i8* %111, i64 %107
%113 = load i8, i8* %112
%114 = sext i8 %113 to i32
%115 = load i8*, i8** %40
%116 = getelementptr inbounds i8, i8* %115, i64 %107
%117 = load i8, i8* %116
%118 = sext i8 %117 to i32
%119 = add nsw i32 %110, 58
%120 = add nsw i32 %114, %118
%121 = sub nsw i32 %119, %120
br label %122
122: ; preds = %104, %100
%123 = phi i32 [ %121, %104 ], [ %102, %100 ]
%124 = icmp eq i32 %46, 3
%125 = and i1 %124, %44
br i1 %125, label %126, label %144
126: ; preds = %122
%127 = load i8*, i8** %0
%128 = load i32, i32* %7
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds i8, i8* %127, i64 %129
%131 = load i8, i8* %130
%132 = sext i8 %131 to i32
%133 = load i8*, i8** %40
%134 = getelementptr inbounds i8, i8* %133, i64 %129
%135 = load i8, i8* %134
%136 = sext i8 %135 to i32
%137 = load i8*, i8** %41
%138 = getelementptr inbounds i8, i8* %137, i64 %129
%139 = load i8, i8* %138
%140 = sext i8 %139 to i32
%141 = add nsw i32 %132, -144
%142 = add nsw i32 %141, %136
%143 = add nsw i32 %142, %140
br label %144
144: ; preds = %82, %126, %122
%145 = phi i1 [ %124, %126 ], [ %124, %122 ], [ false, %82 ]
%146 = phi i1 [ %45, %126 ], [ %45, %122 ], [ %86, %82 ]
%147 = phi i32 [ %143, %126 ], [ %123, %122 ], [ %99, %82 ]
%148 = and i1 %145, %146
br i1 %148, label %149, label %169
149: ; preds = %144
%150 = load i8*, i8** %0
%151 = load i32, i32* %7
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds i8, i8* %150, i64 %152
%154 = load i8, i8* %153
%155 = sext i8 %154 to i16
%156 = load i8*, i8** %40
%157 = getelementptr inbounds i8, i8* %156, i64 %152
%158 = load i8, i8* %157
%159 = sext i8 %158 to i16
%160 = load i8*, i8** %41
%161 = getelementptr inbounds i8, i8* %160, i64 %152
%162 = load i8, i8* %161
%163 = sext i8 %162 to i16
%164 = add nsw i16 %155, -144
%165 = add nsw i16 %164, %159
%166 = add nsw i16 %165, %163
%167 = srem i16 %166, 10
%168 = sext i16 %167 to i32
br label %169
169: ; preds = %149, %144
%170 = phi i32 [ %168, %149 ], [ %147, %144 ]
%171 = add i32 %170, -1
%172 = icmp ult i32 %171, 9
br i1 %172, label %173, label %218
173: ; preds = %169
%174 = zext i32 %170 to i64
%175 = getelementptr inbounds i32, i32* %4, i64 %174
%176 = load i32, i32* %175
%177 = icmp eq i32 %176, 0
br i1 %177, label %178, label %218
178: ; preds = %173
%179 = load i32, i32* %7
%180 = icmp eq i32 %179, 0
%181 = select i1 %146, i1 %180, i1 false
br i1 %181, label %249, label %182
182: ; preds = %178
store i32 1, i32* %175
%183 = trunc i32 %170 to i8
%184 = add nuw nsw i8 %183, 48
%185 = sext i32 %46 to i64
%186 = getelementptr inbounds i8*, i8** %0, i64 %185
%187 = load i8*, i8** %186
%188 = sext i32 %179 to i64
%189 = getelementptr inbounds i8, i8* %187, i64 %188
store i8 %184, i8* %189
%190 = load i32, i32* %7
%191 = icmp sgt i32 %190, 0
%192 = select i1 %146, i1 %191, i1 false
br i1 %192, label %193, label %199
193: ; preds = %182
%194 = load i8*, i8** %0
%195 = add nsw i32 %190, -1
%196 = zext i32 %195 to i64
%197 = getelementptr inbounds i8, i8* %194, i64 %196
store i8 49, i8* %197
%198 = load i32, i32* %7
br label %199
199: ; preds = %193, %182
%200 = phi i32 [ %198, %193 ], [ %190, %182 ]
%201 = load i32, i32* %6
%202 = call i32 @aggiungi(i8** %0, i32 %201, i32 %200, i32 %3, i32* %4)
%203 = icmp eq i32 %202, 1
br i1 %203, label %249, label %204
204: ; preds = %199
store i32 0, i32* %175
%205 = load i32, i32* %6
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds i8*, i8** %0, i64 %206
%208 = load i8*, i8** %207
%209 = load i32, i32* %7
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds i8, i8* %208, i64 %210
store i8 95, i8* %211
br i1 %146, label %212, label %218
212: ; preds = %204
%213 = load i8*, i8** %0
%214 = load i32, i32* %7
%215 = add nsw i32 %214, -1
%216 = sext i32 %215 to i64
%217 = getelementptr inbounds i8, i8* %213, i64 %216
store i8 48, i8* %217
br label %218
218: ; preds = %169, %173, %204, %212
br i1 %44, label %42, label %249
219: ; preds = %34, %246
%220 = phi i64 [ %247, %246 ], [ 1, %34 ]
%221 = getelementptr inbounds i32, i32* %4, i64 %220
%222 = load i32, i32* %221
%223 = icmp eq i32 %222, 0
br i1 %223, label %224, label %246
224: ; preds = %219
store i32 1, i32* %221
%225 = trunc i64 %220 to i8
%226 = add nuw nsw i8 %225, 48
%227 = load i32, i32* %6
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds i8*, i8** %0, i64 %228
%230 = load i8*, i8** %229
%231 = load i32, i32* %7
%232 = sext i32 %231 to i64
%233 = getelementptr inbounds i8, i8* %230, i64 %232
store i8 %226, i8* %233
%234 = load i32, i32* %6
%235 = load i32, i32* %7
%236 = call i32 @aggiungi(i8** %0, i32 %234, i32 %235, i32 %3, i32* %4)
%237 = icmp eq i32 %236, 1
br i1 %237, label %249, label %238
238: ; preds = %224
store i32 0, i32* %221
%239 = load i32, i32* %6
%240 = sext i32 %239 to i64
%241 = getelementptr inbounds i8*, i8** %0, i64 %240
%242 = load i8*, i8** %241
%243 = load i32, i32* %7
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds i8, i8* %242, i64 %244
store i8 95, i8* %245
br label %246
246: ; preds = %219, %238
%247 = add nuw nsw i64 %220, 1
%248 = icmp eq i64 %247, 10
br i1 %248, label %249, label %219
249: ; preds = %178, %199, %218, %224, %246, %30
%250 = phi i32 [ %33, %30 ], [ 0, %246 ], [ 1, %224 ], [ 0, %218 ], [ 1, %199 ], [ 0, %178 ]
ret i32 %250
}