#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*/ print(char *);
int /*<<< orphan*/ printf(char *, int, int, int);
void ex4() {
  print("\n------------------------------\n");
  print("4. Complete as seguintes tabelas da verdade.");
  int a, b;
  print("\nLetra A: [A != B]");
  print("\nA\tB\t[A != B]");
  a = 1;
  b = 1;
  printf("%d\t%d\t%d\n", a, b, a != b);
  a = 1;
  b = 0;
  printf("%d\t%d\t%d\n", a, b, a != b);
  a = 0;
  b = 1;
  printf("%d\t%d\t%d\n", a, b, a != b);
  a = 0;
  b = 0;
  printf("%d\t%d\t%d\n", a, b, a != b);
  print("\nLetra B: [!(A == !B)]");
  print("\nA\tB\t[!(A == !B)]");
  a = 1;
  b = 1;
  printf("%d\t%d\t%d\n", a, b, !(a == !b));
  a = 1;
  b = 0;
  printf("%d\t%d\t%d\n", a, b, !(a == !b));
  a = 0;
  b = 1;
  printf("%d\t%d\t%d\n", a, b, !(a == !b));
  a = 0;
  b = 0;
  printf("%d\t%d\t%d\n", a, b, !(a == !b));
  print("\nLetra C: [!A && !B]");
  print("\nA\tB\t[A != B]");
  a = 1;
  b = 1;
  printf("%d\t%d\t%d\n", a, b, !a && !b);
  a = 1;
  b = 0;
  printf("%d\t%d\t%d\n", a, b, !a && !b);
  a = 0;
  b = 1;
  printf("%d\t%d\t%d\n", a, b, !a && !b);
  a = 0;
  b = 0;
  printf("%d\t%d\t%d\n", a, b, !a && !b);
  print("\n------------------------------\n");
}


x86 assembly (clang, -O0):
<ex4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
lea    0xed1(%rip),%rdi
call   1040 <print@plt>
lea    0xee6(%rip),%rdi
call   1040 <print@plt>
lea    0xf07(%rip),%rdi
call   1040 <print@plt>
lea    0xf0e(%rip),%rdi
call   1040 <print@plt>
movl   $0x1,-0x4(%rbp)
movl   $0x1,-0x8(%rbp)
mov    -0x4(%rbp),%esi
mov    -0x8(%rbp),%edx
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
setne  %al
and    $0x1,%al
movzbl %al,%ecx
lea    0xeee(%rip),%rdi
call   1030 <printf@plt>
movl   $0x1,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
mov    -0x4(%rbp),%esi
mov    -0x8(%rbp),%edx
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
setne  %al
and    $0x1,%al
movzbl %al,%ecx
lea    0xec0(%rip),%rdi
call   1030 <printf@plt>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x8(%rbp)
mov    -0x4(%rbp),%esi
mov    -0x8(%rbp),%edx
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
setne  %al
and    $0x1,%al
movzbl %al,%ecx
lea    0xe92(%rip),%rdi
call   1030 <printf@plt>
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
mov    -0x4(%rbp),%esi
mov    -0x8(%rbp),%edx
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
setne  %al
and    $0x1,%al
movzbl %al,%ecx
lea    0xe64(%rip),%rdi
call   1030 <printf@plt>
lea    0xe62(%rip),%rdi
call   1040 <print@plt>
lea    0xe6d(%rip),%rdi
call   1040 <print@plt>
movl   $0x1,-0x4(%rbp)
movl   $0x1,-0x8(%rbp)
mov    -0x4(%rbp),%esi
mov    -0x8(%rbp),%edx
mov    -0x4(%rbp),%eax
cmpl   $0x0,-0x8(%rbp)
setne  %cl
xor    $0xff,%cl
and    $0x1,%cl
movzbl %cl,%ecx
cmp    %ecx,%eax
sete   %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%ecx
lea    0xe0d(%rip),%rdi
call   1030 <printf@plt>
movl   $0x1,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
mov    -0x4(%rbp),%esi
mov    -0x8(%rbp),%edx
mov    -0x4(%rbp),%eax
cmpl   $0x0,-0x8(%rbp)
setne  %cl
xor    $0xff,%cl
and    $0x1,%cl
movzbl %cl,%ecx
cmp    %ecx,%eax
sete   %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%ecx
lea    0xdce(%rip),%rdi
call   1030 <printf@plt>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x8(%rbp)
mov    -0x4(%rbp),%esi
mov    -0x8(%rbp),%edx
mov    -0x4(%rbp),%eax
cmpl   $0x0,-0x8(%rbp)
setne  %cl
xor    $0xff,%cl
and    $0x1,%cl
movzbl %cl,%ecx
cmp    %ecx,%eax
sete   %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%ecx
lea    0xd8f(%rip),%rdi
call   1030 <printf@plt>
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
mov    -0x4(%rbp),%esi
mov    -0x8(%rbp),%edx
mov    -0x4(%rbp),%eax
cmpl   $0x0,-0x8(%rbp)
setne  %cl
xor    $0xff,%cl
and    $0x1,%cl
movzbl %cl,%ecx
cmp    %ecx,%eax
sete   %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%ecx
lea    0xd50(%rip),%rdi
call   1030 <printf@plt>
lea    0xd77(%rip),%rdi
call   1040 <print@plt>
lea    0xd2a(%rip),%rdi
call   1040 <print@plt>
movl   $0x1,-0x4(%rbp)
movl   $0x1,-0x8(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x10(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x4(%rbp)
mov    %al,-0x9(%rbp)
jne    1371 <ex4+0x251>
cmpl   $0x0,-0x8(%rbp)
setne  %al
xor    $0xff,%al
mov    %al,-0x9(%rbp)
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%esi
mov    -0x9(%rbp),%al
and    $0x1,%al
movzbl %al,%ecx
lea    0xce9(%rip),%rdi
call   1030 <printf@plt>
movl   $0x1,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x1c(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x4(%rbp)
mov    %al,-0x15(%rbp)
jne    13c0 <ex4+0x2a0>
cmpl   $0x0,-0x8(%rbp)
setne  %al
xor    $0xff,%al
mov    %al,-0x15(%rbp)
mov    -0x1c(%rbp),%edx
mov    -0x20(%rbp),%esi
mov    -0x15(%rbp),%al
and    $0x1,%al
movzbl %al,%ecx
lea    0xc9a(%rip),%rdi
call   1030 <printf@plt>
movl   $0x0,-0x4(%rbp)
movl   $0x1,-0x8(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x28(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x4(%rbp)
mov    %al,-0x21(%rbp)
jne    140f <ex4+0x2ef>
cmpl   $0x0,-0x8(%rbp)
setne  %al
xor    $0xff,%al
mov    %al,-0x21(%rbp)
mov    -0x28(%rbp),%edx
mov    -0x2c(%rbp),%esi
mov    -0x21(%rbp),%al
and    $0x1,%al
movzbl %al,%ecx
lea    0xc4b(%rip),%rdi
call   1030 <printf@plt>
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x34(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x4(%rbp)
mov    %al,-0x2d(%rbp)
jne    145e <ex4+0x33e>
cmpl   $0x0,-0x8(%rbp)
setne  %al
xor    $0xff,%al
mov    %al,-0x2d(%rbp)
mov    -0x34(%rbp),%edx
mov    -0x38(%rbp),%esi
mov    -0x2d(%rbp),%al
and    $0x1,%al
movzbl %al,%ecx
lea    0xbfc(%rip),%rdi
call   1030 <printf@plt>
lea    0xb81(%rip),%rdi
call   1040 <print@plt>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ex4>:
push   %r15
push   %r14
push   %rbx
lea    0xed4(%rip),%r14
mov    %r14,%rdi
call   1040 <print@plt>
lea    0xee6(%rip),%rdi
call   1040 <print@plt>
lea    0xf07(%rip),%rdi
call   1040 <print@plt>
lea    0xf0e(%rip),%r15
mov    %r15,%rdi
call   1040 <print@plt>
lea    0xf0d(%rip),%rbx
mov    %rbx,%rdi
mov    $0x1,%esi
mov    $0x1,%edx
xor    %ecx,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x1,%esi
xor    %edx,%edx
mov    $0x1,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
xor    %esi,%esi
mov    $0x1,%edx
mov    $0x1,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
xor    %esi,%esi
xor    %edx,%edx
xor    %ecx,%ecx
call   1030 <printf@plt>
lea    0xec6(%rip),%rdi
call   1040 <print@plt>
lea    0xed1(%rip),%rdi
call   1040 <print@plt>
mov    %rbx,%rdi
mov    $0x1,%esi
mov    $0x1,%edx
mov    $0x1,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x1,%esi
xor    %edx,%edx
xor    %ecx,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
xor    %esi,%esi
mov    $0x1,%edx
xor    %ecx,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
xor    %esi,%esi
xor    %edx,%edx
mov    $0x1,%ecx
call   1030 <printf@plt>
lea    0xe8d(%rip),%rdi
call   1040 <print@plt>
mov    %r15,%rdi
call   1040 <print@plt>
mov    %rbx,%rdi
mov    $0x1,%esi
mov    $0x1,%edx
xor    %ecx,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
mov    $0x1,%esi
xor    %edx,%edx
xor    %ecx,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
xor    %esi,%esi
mov    $0x1,%edx
xor    %ecx,%ecx
call   1030 <printf@plt>
mov    %rbx,%rdi
xor    %esi,%esi
xor    %edx,%edx
mov    $0x1,%ecx
call   1030 <printf@plt>
mov    %r14,%rdi
pop    %rbx
pop    %r14
pop    %r15
jmp    1040 <print@plt>

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

LLVM IR (-O2):
@.str = [33 x i8] c"\0A------------------------------\0A\00"
@.str.1 = [45 x i8] c"4. Complete as seguintes tabelas da verdade.\00"
@.str.2 = [19 x i8] c"\0ALetra A: [A != B]\00"
@.str.3 = [14 x i8] c"\0AA\09B\09[A != B]\00"
@.str.4 = [10 x i8] c"%d\09%d\09%d\0A\00"
@.str.5 = [23 x i8] c"\0ALetra B: [!(A == !B)]\00"
@.str.6 = [18 x i8] c"\0AA\09B\09[!(A == !B)]\00"
@.str.7 = [21 x i8] c"\0ALetra C: [!A && !B]\00"
define void @ex4() {
%1 = tail call i32 @print(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str, i64 0, i64 0))
%2 = tail call i32 @print(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.1, i64 0, i64 0))
%3 = tail call i32 @print(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.2, i64 0, i64 0))
%4 = tail call i32 @print(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.3, i64 0, i64 0))
%5 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0), i32 1, i32 1, i32 0)
%6 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0), i32 1, i32 0, i32 1)
%7 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0), i32 0, i32 1, i32 1)
%8 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0), i32 0, i32 0, i32 0)
%9 = tail call i32 @print(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.5, i64 0, i64 0))
%10 = tail call i32 @print(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.6, i64 0, i64 0))
%11 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0), i32 1, i32 1, i32 1)
%12 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0), i32 1, i32 0, i32 0)
%13 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0), i32 0, i32 1, i32 0)
%14 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0), i32 0, i32 0, i32 1)
%15 = tail call i32 @print(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.7, i64 0, i64 0))
%16 = tail call i32 @print(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.3, i64 0, i64 0))
%17 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0), i32 1, i32 1, i32 0)
%18 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0), i32 1, i32 0, i32 0)
%19 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0), i32 0, i32 1, i32 0)
%20 = tail call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0), i32 0, i32 0, i32 1)
%21 = tail call i32 @print(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str, i64 0, i64 0))
ret void
}