#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*/ differenza(int *, int, int *, int);
int /*<<< orphan*/ intersezione(int *, int, int *, int);
int /*<<< orphan*/ printf(char *);
int scanf(char *, ...);
int /*<<< orphan*/ stampaVett(int *, int);
int /*<<< orphan*/ unione(int *, int, int *, int);
int main() {
  int v1[20] = {0}, v2[20] = {0};
  int x;
  int len_v1 = 0;
  int len_v2 = 0;
  char c;
  int i;
  printf("Inserisci V1 ('x' per terminare):\n");
  for (i = 0; i < 20; i++) {
    if (scanf("%d", &v1[i]) == 0) {
      if (scanf("%c", &c) == 1 && c == 'x') {
        break;
      } else {
        return -1;
      }
    }
  }
  len_v1 = i;
  printf("Inserisci V2 ('x' per terminare):\n");
  for (i = 0; i < 20; i++) {
    if (scanf("%d", &v2[i]) == 0) {
      if (scanf("%c", &c) == 1 && c == 'x') {
        break;
      } else {
        return -1;
      }
    }
  }
  len_v2 = i;
  stampaVett(v1, len_v1);
  stampaVett(v2, len_v2);
  unione(v1, len_v1, v2, len_v2);
  differenza(v1, len_v1, v2, len_v2);
  intersezione(v1, len_v1, v2, len_v2);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x60(%rbp),%rdi
xor    %esi,%esi
mov    $0x50,%edx
call   1050 <memset@plt>
lea    -0xb0(%rbp),%rdi
xor    %esi,%esi
mov    $0x50,%edx
call   1050 <memset@plt>
movl   $0x0,-0xb8(%rbp)
movl   $0x0,-0xbc(%rbp)
lea    0xe40(%rip),%rdi
call   1040 <printf@plt>
movl   $0x0,-0xc4(%rbp)
cmpl   $0x14,-0xc4(%rbp)
jge    125d <main+0xed>
movslq -0xc4(%rbp),%rax
lea    -0x60(%rbp),%rsi
shl    $0x2,%rax
add    %rax,%rsi
lea    0xe2e(%rip),%rdi
mov    $0x0,%al
call   1060 <scanf@plt>
cmp    $0x0,%eax
jne    1244 <main+0xd4>
lea    0xe1a(%rip),%rdi
lea    -0xbd(%rbp),%rsi
mov    $0x0,%al
call   1060 <scanf@plt>
cmp    $0x1,%eax
jne    1238 <main+0xc8>
movsbl -0xbd(%rbp),%eax
cmp    $0x78,%eax
jne    1238 <main+0xc8>
jmp    125d <main+0xed>
movl   $0xffffffff,-0x4(%rbp)
jmp    1398 <main+0x228>
jmp    1249 <main+0xd9>
mov    -0xc4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc4(%rbp)
jmp    11cf <main+0x5f>
mov    -0xc4(%rbp),%eax
mov    %eax,-0xb8(%rbp)
lea    0xdb9(%rip),%rdi
call   1040 <printf@plt>
movl   $0x0,-0xc4(%rbp)
cmpl   $0x14,-0xc4(%rbp)
jge    1310 <main+0x1a0>
movslq -0xc4(%rbp),%rax
lea    -0xb0(%rbp),%rsi
shl    $0x2,%rax
add    %rax,%rsi
lea    0xd7b(%rip),%rdi
mov    $0x0,%al
call   1060 <scanf@plt>
cmp    $0x0,%eax
jne    12f7 <main+0x187>
lea    0xd67(%rip),%rdi
lea    -0xbd(%rbp),%rsi
mov    $0x0,%al
call   1060 <scanf@plt>
cmp    $0x1,%eax
jne    12eb <main+0x17b>
movsbl -0xbd(%rbp),%eax
cmp    $0x78,%eax
jne    12eb <main+0x17b>
jmp    1310 <main+0x1a0>
movl   $0xffffffff,-0x4(%rbp)
jmp    1398 <main+0x228>
jmp    12fc <main+0x18c>
mov    -0xc4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc4(%rbp)
jmp    127f <main+0x10f>
mov    -0xc4(%rbp),%eax
mov    %eax,-0xbc(%rbp)
lea    -0x60(%rbp),%rdi
mov    -0xb8(%rbp),%esi
call   1070 <stampaVett@plt>
lea    -0xb0(%rbp),%rdi
mov    -0xbc(%rbp),%esi
call   1070 <stampaVett@plt>
lea    -0x60(%rbp),%rdi
mov    -0xb8(%rbp),%esi
lea    -0xb0(%rbp),%rdx
mov    -0xbc(%rbp),%ecx
call   1080 <unione@plt>
lea    -0x60(%rbp),%rdi
mov    -0xb8(%rbp),%esi
lea    -0xb0(%rbp),%rdx
mov    -0xbc(%rbp),%ecx
call   1030 <differenza@plt>
lea    -0x60(%rbp),%rdi
mov    -0xb8(%rbp),%esi
lea    -0xb0(%rbp),%rdx
mov    -0xbc(%rbp),%ecx
call   1090 <intersezione@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0xb8,%rsp
xorps  %xmm0,%xmm0
movaps %xmm0,0xa0(%rsp)
movaps %xmm0,0x90(%rsp)
movaps %xmm0,0x80(%rsp)
movaps %xmm0,0x70(%rsp)
movaps %xmm0,0x60(%rsp)
movaps %xmm0,0x50(%rsp)
movaps %xmm0,0x40(%rsp)
movaps %xmm0,0x30(%rsp)
movaps %xmm0,0x20(%rsp)
movaps %xmm0,0x10(%rsp)
lea    0xe54(%rip),%rdi
call   1040 <puts@plt>
lea    0xe42(%rip),%rdi
xor    %r14d,%r14d
lea    0x60(%rsp),%rsi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     149c <main+0x33c>
lea    0x64(%rsp),%rsi
lea    0xe1f(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     140b <main+0x2ab>
lea    0x68(%rsp),%rsi
lea    0xe04(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1416 <main+0x2b6>
lea    0x6c(%rsp),%rsi
lea    0xde9(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     141e <main+0x2be>
lea    0x70(%rsp),%rsi
lea    0xdce(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1426 <main+0x2c6>
lea    0x74(%rsp),%rsi
lea    0xdb3(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     142e <main+0x2ce>
lea    0x78(%rsp),%rsi
lea    0xd98(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1436 <main+0x2d6>
lea    0x7c(%rsp),%rsi
lea    0xd7d(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     143e <main+0x2de>
lea    0x80(%rsp),%rsi
lea    0xd5f(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1446 <main+0x2e6>
lea    0x84(%rsp),%rsi
lea    0xd41(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     144e <main+0x2ee>
lea    0x88(%rsp),%rsi
lea    0xd23(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1456 <main+0x2f6>
lea    0x8c(%rsp),%rsi
lea    0xd05(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     145e <main+0x2fe>
lea    0x90(%rsp),%rsi
lea    0xce7(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1466 <main+0x306>
lea    0x94(%rsp),%rsi
lea    0xcc9(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     146e <main+0x30e>
lea    0x98(%rsp),%rsi
lea    0xcab(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1476 <main+0x316>
lea    0x9c(%rsp),%rsi
lea    0xc8d(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     147e <main+0x31e>
lea    0xa0(%rsp),%rsi
lea    0xc6f(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1486 <main+0x326>
lea    0xa4(%rsp),%rsi
lea    0xc51(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     148e <main+0x32e>
lea    0xa8(%rsp),%rsi
lea    0xc33(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1496 <main+0x336>
lea    0xac(%rsp),%rsi
lea    0xc15(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
mov    $0x14,%r14d
test   %eax,%eax
jne    14ca <main+0x36a>
mov    $0x13,%r14d
jmp    149c <main+0x33c>
mov    $0x1,%r14d
jmp    149c <main+0x33c>
mov    $0x2,%r14d
jmp    149c <main+0x33c>
mov    $0x3,%r14d
jmp    149c <main+0x33c>
mov    $0x4,%r14d
jmp    149c <main+0x33c>
mov    $0x5,%r14d
jmp    149c <main+0x33c>
mov    $0x6,%r14d
jmp    149c <main+0x33c>
mov    $0x7,%r14d
jmp    149c <main+0x33c>
mov    $0x8,%r14d
jmp    149c <main+0x33c>
mov    $0x9,%r14d
jmp    149c <main+0x33c>
mov    $0xa,%r14d
jmp    149c <main+0x33c>
mov    $0xb,%r14d
jmp    149c <main+0x33c>
mov    $0xc,%r14d
jmp    149c <main+0x33c>
mov    $0xd,%r14d
jmp    149c <main+0x33c>
mov    $0xe,%r14d
jmp    149c <main+0x33c>
mov    $0xf,%r14d
jmp    149c <main+0x33c>
mov    $0x10,%r14d
jmp    149c <main+0x33c>
mov    $0x11,%r14d
jmp    149c <main+0x33c>
mov    $0x12,%r14d
lea    0xb60(%rip),%rdi
lea    0xf(%rsp),%rsi
xor    %eax,%eax
call   1050 <scanf@plt>
mov    %eax,%ecx
mov    $0xffffffff,%eax
cmp    $0x1,%ecx
jne    1812 <main+0x6b2>
cmpb   $0x78,0xf(%rsp)
jne    1812 <main+0x6b2>
lea    0xb57(%rip),%rdi
call   1040 <puts@plt>
lea    0xb23(%rip),%rdi
xor    %r15d,%r15d
lea    0x10(%rsp),%rsi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1797 <main+0x637>
lea    0x14(%rsp),%rsi
lea    0xb00(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1706 <main+0x5a6>
lea    0x18(%rsp),%rsi
lea    0xae5(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1711 <main+0x5b1>
lea    0x1c(%rsp),%rsi
lea    0xaca(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1719 <main+0x5b9>
lea    0x20(%rsp),%rsi
lea    0xaaf(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1721 <main+0x5c1>
lea    0x24(%rsp),%rsi
lea    0xa94(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1729 <main+0x5c9>
lea    0x28(%rsp),%rsi
lea    0xa79(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1731 <main+0x5d1>
lea    0x2c(%rsp),%rsi
lea    0xa5e(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1739 <main+0x5d9>
lea    0x30(%rsp),%rsi
lea    0xa43(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1741 <main+0x5e1>
lea    0x34(%rsp),%rsi
lea    0xa28(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1749 <main+0x5e9>
lea    0x38(%rsp),%rsi
lea    0xa0d(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1751 <main+0x5f1>
lea    0x3c(%rsp),%rsi
lea    0x9f2(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1759 <main+0x5f9>
lea    0x40(%rsp),%rsi
lea    0x9d7(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1761 <main+0x601>
lea    0x44(%rsp),%rsi
lea    0x9bc(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1769 <main+0x609>
lea    0x48(%rsp),%rsi
lea    0x9a1(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1771 <main+0x611>
lea    0x4c(%rsp),%rsi
lea    0x986(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1779 <main+0x619>
lea    0x50(%rsp),%rsi
lea    0x96b(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1781 <main+0x621>
lea    0x54(%rsp),%rsi
lea    0x950(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1789 <main+0x629>
lea    0x58(%rsp),%rsi
lea    0x935(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
test   %eax,%eax
je     1791 <main+0x631>
lea    0x5c(%rsp),%rsi
lea    0x91a(%rip),%rdi
xor    %eax,%eax
call   1050 <scanf@plt>
mov    $0x14,%r15d
test   %eax,%eax
jne    17bd <main+0x65d>
mov    $0x13,%r15d
jmp    1797 <main+0x637>
mov    $0x1,%r15d
jmp    1797 <main+0x637>
mov    $0x2,%r15d
jmp    1797 <main+0x637>
mov    $0x3,%r15d
jmp    1797 <main+0x637>
mov    $0x4,%r15d
jmp    1797 <main+0x637>
mov    $0x5,%r15d
jmp    1797 <main+0x637>
mov    $0x6,%r15d
jmp    1797 <main+0x637>
mov    $0x7,%r15d
jmp    1797 <main+0x637>
mov    $0x8,%r15d
jmp    1797 <main+0x637>
mov    $0x9,%r15d
jmp    1797 <main+0x637>
mov    $0xa,%r15d
jmp    1797 <main+0x637>
mov    $0xb,%r15d
jmp    1797 <main+0x637>
mov    $0xc,%r15d
jmp    1797 <main+0x637>
mov    $0xd,%r15d
jmp    1797 <main+0x637>
mov    $0xe,%r15d
jmp    1797 <main+0x637>
mov    $0xf,%r15d
jmp    1797 <main+0x637>
mov    $0x10,%r15d
jmp    1797 <main+0x637>
mov    $0x11,%r15d
jmp    1797 <main+0x637>
mov    $0x12,%r15d
lea    0x865(%rip),%rdi
lea    0xf(%rsp),%rsi
xor    %eax,%eax
call   1050 <scanf@plt>
mov    %eax,%ecx
mov    $0xffffffff,%eax
cmp    $0x1,%ecx
jne    1812 <main+0x6b2>
cmpb   $0x78,0xf(%rsp)
jne    1812 <main+0x6b2>
lea    0x60(%rsp),%rbx
mov    %rbx,%rdi
mov    %r14d,%esi
call   1060 <stampaVett@plt>
lea    0x10(%rsp),%rbp
mov    %rbp,%rdi
mov    %r15d,%esi
call   1060 <stampaVett@plt>
mov    %rbx,%rdi
mov    %r14d,%esi
mov    %rbp,%rdx
mov    %r15d,%ecx
call   1070 <unione@plt>
mov    %rbx,%rdi
mov    %r14d,%esi
mov    %rbp,%rdx
mov    %r15d,%ecx
call   1030 <differenza@plt>
mov    %rbx,%rdi
mov    %r14d,%esi
mov    %rbp,%rdx
mov    %r15d,%ecx
call   1080 <intersezione@plt>
xor    %eax,%eax
add    $0xb8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [35 x i8] c"Inserisci V1 ('x' per terminare):\0A\00"
@.str.1 = [3 x i8] c"%d\00"
@.str.2 = [3 x i8] c"%c\00"
@.str.3 = [35 x i8] c"Inserisci V2 ('x' per terminare):\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [20 x i32]
%3 = alloca [20 x i32]
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i8
%8 = alloca i32
store i32 0, i32* %1
%9 = bitcast [20 x i32]* %2 to i8*
%10 = bitcast [20 x i32]* %3 to i8*
store i32 0, i32* %5
store i32 0, i32* %6
%11 = call i32 @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str, i64 0, i64 0))
store i32 0, i32* %8
br label %12
12: ; preds = %31, %0
%13 = load i32, i32* %8
%14 = icmp slt i32 %13, 20
br i1 %14, label %15, label %34
15: ; preds = %12
%16 = load i32, i32* %8
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 %17
%19 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %18)
%20 = icmp eq i32 %19, 0
br i1 %20, label %21, label %30
21: ; preds = %15
%22 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8* %7)
%23 = icmp eq i32 %22, 1
br i1 %23, label %24, label %29
24: ; preds = %21
%25 = load i8, i8* %7
%26 = sext i8 %25 to i32
%27 = icmp eq i32 %26, 120
br i1 %27, label %28, label %29
28: ; preds = %24
br label %34
29: ; preds = %24, %21
store i32 -1, i32* %1
br label %82
30: ; preds = %15
br label %31
31: ; preds = %30
%32 = load i32, i32* %8
%33 = add nsw i32 %32, 1
store i32 %33, i32* %8
br label %12
34: ; preds = %28, %12
%35 = load i32, i32* %8
store i32 %35, i32* %5
%36 = call i32 @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.3, i64 0, i64 0))
store i32 0, i32* %8
br label %37
37: ; preds = %56, %34
%38 = load i32, i32* %8
%39 = icmp slt i32 %38, 20
br i1 %39, label %40, label %59
40: ; preds = %37
%41 = load i32, i32* %8
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds [20 x i32], [20 x i32]* %3, i64 0, i64 %42
%44 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %43)
%45 = icmp eq i32 %44, 0
br i1 %45, label %46, label %55
46: ; preds = %40
%47 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8* %7)
%48 = icmp eq i32 %47, 1
br i1 %48, label %49, label %54
49: ; preds = %46
%50 = load i8, i8* %7
%51 = sext i8 %50 to i32
%52 = icmp eq i32 %51, 120
br i1 %52, label %53, label %54
53: ; preds = %49
br label %59
54: ; preds = %49, %46
store i32 -1, i32* %1
br label %82
55: ; preds = %40
br label %56
56: ; preds = %55
%57 = load i32, i32* %8
%58 = add nsw i32 %57, 1
store i32 %58, i32* %8
br label %37
59: ; preds = %53, %37
%60 = load i32, i32* %8
store i32 %60, i32* %6
%61 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 0
%62 = load i32, i32* %5
%63 = call i32 @stampaVett(i32* %61, i32 %62)
%64 = getelementptr inbounds [20 x i32], [20 x i32]* %3, i64 0, i64 0
%65 = load i32, i32* %6
%66 = call i32 @stampaVett(i32* %64, i32 %65)
%67 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 0
%68 = load i32, i32* %5
%69 = getelementptr inbounds [20 x i32], [20 x i32]* %3, i64 0, i64 0
%70 = load i32, i32* %6
%71 = call i32 @unione(i32* %67, i32 %68, i32* %69, i32 %70)
%72 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 0
%73 = load i32, i32* %5
%74 = getelementptr inbounds [20 x i32], [20 x i32]* %3, i64 0, i64 0
%75 = load i32, i32* %6
%76 = call i32 @differenza(i32* %72, i32 %73, i32* %74, i32 %75)
%77 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 0
%78 = load i32, i32* %5
%79 = getelementptr inbounds [20 x i32], [20 x i32]* %3, i64 0, i64 0
%80 = load i32, i32* %6
%81 = call i32 @intersezione(i32* %77, i32 %78, i32* %79, i32 %80)
store i32 0, i32* %1
br label %82
82: ; preds = %59, %54, %29
%83 = load i32, i32* %1
ret i32 %83
}

LLVM IR (-O2):
@.str.1 = [3 x i8] c"%d\00"
@.str.2 = [3 x i8] c"%c\00"
@str = [34 x i8] c"Inserisci V1 ('x' per terminare):\00"
@str.4 = [34 x i8] c"Inserisci V2 ('x' per terminare):\00"
define i32 @main() {
%1 = alloca [20 x i32]
%2 = alloca [20 x i32]
%3 = alloca i8
%4 = bitcast [20 x i32]* %1 to i8*
%5 = bitcast [20 x i32]* %2 to i8*
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str, i64 0, i64 0))
%7 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 0
%8 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %7)
%9 = icmp eq i32 %8, 0
br i1 %9, label %10, label %17
10: ; preds = %89, %85, %81, %77, %73, %69, %65, %61, %57, %53, %49, %45, %41, %37, %33, %29, %25, %21, %17, %0
%11 = phi i32 [ 0, %0 ], [ 1, %17 ], [ 2, %21 ], [ 3, %25 ], [ 4, %29 ], [ 5, %33 ], [ 6, %37 ], [ 7, %41 ], [ 8, %45 ], [ 9, %49 ], [ 10, %53 ], [ 11, %57 ], [ 12, %61 ], [ 13, %65 ], [ 14, %69 ], [ 15, %73 ], [ 16, %77 ], [ 17, %81 ], [ 18, %85 ], [ 19, %89 ]
%12 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8* %3)
%13 = icmp eq i32 %12, 1
%14 = load i8, i8* %3
%15 = icmp eq i8 %14, 120
%16 = select i1 %13, i1 %15, i1 false
br i1 %16, label %93, label %189
17: ; preds = %0
%18 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 1
%19 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %18)
%20 = icmp eq i32 %19, 0
br i1 %20, label %10, label %21
21: ; preds = %17
%22 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 2
%23 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %22)
%24 = icmp eq i32 %23, 0
br i1 %24, label %10, label %25
25: ; preds = %21
%26 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 3
%27 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %26)
%28 = icmp eq i32 %27, 0
br i1 %28, label %10, label %29
29: ; preds = %25
%30 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 4
%31 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %30)
%32 = icmp eq i32 %31, 0
br i1 %32, label %10, label %33
33: ; preds = %29
%34 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 5
%35 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %34)
%36 = icmp eq i32 %35, 0
br i1 %36, label %10, label %37
37: ; preds = %33
%38 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 6
%39 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %38)
%40 = icmp eq i32 %39, 0
br i1 %40, label %10, label %41
41: ; preds = %37
%42 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 7
%43 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %42)
%44 = icmp eq i32 %43, 0
br i1 %44, label %10, label %45
45: ; preds = %41
%46 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 8
%47 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %46)
%48 = icmp eq i32 %47, 0
br i1 %48, label %10, label %49
49: ; preds = %45
%50 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 9
%51 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %50)
%52 = icmp eq i32 %51, 0
br i1 %52, label %10, label %53
53: ; preds = %49
%54 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 10
%55 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %54)
%56 = icmp eq i32 %55, 0
br i1 %56, label %10, label %57
57: ; preds = %53
%58 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 11
%59 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %58)
%60 = icmp eq i32 %59, 0
br i1 %60, label %10, label %61
61: ; preds = %57
%62 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 12
%63 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %62)
%64 = icmp eq i32 %63, 0
br i1 %64, label %10, label %65
65: ; preds = %61
%66 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 13
%67 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %66)
%68 = icmp eq i32 %67, 0
br i1 %68, label %10, label %69
69: ; preds = %65
%70 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 14
%71 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %70)
%72 = icmp eq i32 %71, 0
br i1 %72, label %10, label %73
73: ; preds = %69
%74 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 15
%75 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %74)
%76 = icmp eq i32 %75, 0
br i1 %76, label %10, label %77
77: ; preds = %73
%78 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 16
%79 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %78)
%80 = icmp eq i32 %79, 0
br i1 %80, label %10, label %81
81: ; preds = %77
%82 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 17
%83 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %82)
%84 = icmp eq i32 %83, 0
br i1 %84, label %10, label %85
85: ; preds = %81
%86 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 18
%87 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %86)
%88 = icmp eq i32 %87, 0
br i1 %88, label %10, label %89
89: ; preds = %85
%90 = getelementptr inbounds [20 x i32], [20 x i32]* %1, i64 0, i64 19
%91 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %90)
%92 = icmp eq i32 %91, 0
br i1 %92, label %10, label %93
93: ; preds = %89, %10
%94 = phi i32 [ %11, %10 ], [ 20, %89 ]
%95 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.4, i64 0, i64 0))
%96 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 0
%97 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %96)
%98 = icmp eq i32 %97, 0
br i1 %98, label %99, label %106
99: ; preds = %178, %174, %170, %166, %162, %158, %154, %150, %146, %142, %138, %134, %130, %126, %122, %118, %114, %110, %106, %93
%100 = phi i32 [ 0, %93 ], [ 1, %106 ], [ 2, %110 ], [ 3, %114 ], [ 4, %118 ], [ 5, %122 ], [ 6, %126 ], [ 7, %130 ], [ 8, %134 ], [ 9, %138 ], [ 10, %142 ], [ 11, %146 ], [ 12, %150 ], [ 13, %154 ], [ 14, %158 ], [ 15, %162 ], [ 16, %166 ], [ 17, %170 ], [ 18, %174 ], [ 19, %178 ]
%101 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8* %3)
%102 = icmp eq i32 %101, 1
%103 = load i8, i8* %3
%104 = icmp eq i8 %103, 120
%105 = select i1 %102, i1 %104, i1 false
br i1 %105, label %182, label %189
106: ; preds = %93
%107 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 1
%108 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %107)
%109 = icmp eq i32 %108, 0
br i1 %109, label %99, label %110
110: ; preds = %106
%111 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 2
%112 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %111)
%113 = icmp eq i32 %112, 0
br i1 %113, label %99, label %114
114: ; preds = %110
%115 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 3
%116 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %115)
%117 = icmp eq i32 %116, 0
br i1 %117, label %99, label %118
118: ; preds = %114
%119 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 4
%120 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %119)
%121 = icmp eq i32 %120, 0
br i1 %121, label %99, label %122
122: ; preds = %118
%123 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 5
%124 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %123)
%125 = icmp eq i32 %124, 0
br i1 %125, label %99, label %126
126: ; preds = %122
%127 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 6
%128 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %127)
%129 = icmp eq i32 %128, 0
br i1 %129, label %99, label %130
130: ; preds = %126
%131 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 7
%132 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %131)
%133 = icmp eq i32 %132, 0
br i1 %133, label %99, label %134
134: ; preds = %130
%135 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 8
%136 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %135)
%137 = icmp eq i32 %136, 0
br i1 %137, label %99, label %138
138: ; preds = %134
%139 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 9
%140 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %139)
%141 = icmp eq i32 %140, 0
br i1 %141, label %99, label %142
142: ; preds = %138
%143 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 10
%144 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %143)
%145 = icmp eq i32 %144, 0
br i1 %145, label %99, label %146
146: ; preds = %142
%147 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 11
%148 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %147)
%149 = icmp eq i32 %148, 0
br i1 %149, label %99, label %150
150: ; preds = %146
%151 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 12
%152 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %151)
%153 = icmp eq i32 %152, 0
br i1 %153, label %99, label %154
154: ; preds = %150
%155 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 13
%156 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %155)
%157 = icmp eq i32 %156, 0
br i1 %157, label %99, label %158
158: ; preds = %154
%159 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 14
%160 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %159)
%161 = icmp eq i32 %160, 0
br i1 %161, label %99, label %162
162: ; preds = %158
%163 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 15
%164 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %163)
%165 = icmp eq i32 %164, 0
br i1 %165, label %99, label %166
166: ; preds = %162
%167 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 16
%168 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %167)
%169 = icmp eq i32 %168, 0
br i1 %169, label %99, label %170
170: ; preds = %166
%171 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 17
%172 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %171)
%173 = icmp eq i32 %172, 0
br i1 %173, label %99, label %174
174: ; preds = %170
%175 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 18
%176 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %175)
%177 = icmp eq i32 %176, 0
br i1 %177, label %99, label %178
178: ; preds = %174
%179 = getelementptr inbounds [20 x i32], [20 x i32]* %2, i64 0, i64 19
%180 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %179)
%181 = icmp eq i32 %180, 0
br i1 %181, label %99, label %182
182: ; preds = %178, %99
%183 = phi i32 [ %100, %99 ], [ 20, %178 ]
%184 = call i32 @stampaVett(i32* %7, i32 %94)
%185 = call i32 @stampaVett(i32* %96, i32 %183)
%186 = call i32 @unione(i32* %7, i32 %94, i32* %96, i32 %183)
%187 = call i32 @differenza(i32* %7, i32 %94, i32* %96, i32 %183)
%188 = call i32 @intersezione(i32* %7, i32 %94, i32* %96, i32 %183)
br label %189
189: ; preds = %99, %10, %182
%190 = phi i32 [ 0, %182 ], [ -1, %10 ], [ -1, %99 ]
ret i32 %190
}