#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 */
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
int /*<<< orphan*/ fclose(int /*<<< orphan*/ *);
int /*<<< orphan*/ *fopen(char *, char *);
int fread(unsigned char *, int, int, int /*<<< orphan*/ *);
int /*<<< orphan*/ free(unsigned char *);
unsigned char *malloc(int);
int /*<<< orphan*/ printf(char *, ...);
int main(int argc, char *argv[]) {
  int a;
  if (argc == 1) {
    printf("Este programa tem o objetivo de listar o formato de um ou mais "
           "arquivos\n");
    printf("Uso: tarefa <arquivo.formato>\n");
  } else {
    for (a = 1; a < argc; a++) {
      FILE *arquivo = fopen(argv[a], "r");
      if (arquivo == NULL) {
        printf("Erro ao abrir arquivo!\n");
        return 1;
      }
      int n, tam;
      tam = 500;
      unsigned char *p_c = NULL;
      p_c = malloc(tam * sizeof(char));
      n = fread(p_c, sizeof(char), tam, arquivo);
      n = n;
      if (p_c[0] == 0x25 && p_c[1] == 0x50 && p_c[2] == 0x44 &&
          p_c[3] == 0x46) {
        printf("Arquivo: %s é do tipo PDF\n", argv[a]);
      } else {
        if (p_c[0] == 0x89 && p_c[1] == 0x50 && p_c[2] == 0x4E &&
            p_c[3] == 0x47 && p_c[4] == 0x0D && p_c[5] == 0x0A &&
            p_c[6] == 0x1A && p_c[7] == 0x0A) {
          printf("Arquivo: %s é do tipo PNG\n", argv[a]);
        } else {
          if (p_c[0] == 0x50 && p_c[1] == 0x4B && p_c[2] == 0x03 &&
              p_c[3] == 0x04) {
            printf("Arquivo: %s é do tipo ZIP\n", argv[a]);
          } else {
            if (p_c[0] == 0x50 && p_c[1] == 0x4B && p_c[2] == 0x05 &&
                p_c[3] == 0x06) {
              printf("Arquivo: %s é do tipo ZIP\n", argv[a]);
            } else {
              if (p_c[0] == 0x50 && p_c[1] == 0x4B && p_c[2] == 0x07 &&
                  p_c[3] == 0x08) {
                printf("Arquivo: %s é do tipo ZIP\n", argv[a]);
              } else {
                if (p_c[0] == 0x52 && p_c[1] == 0x49 && p_c[2] == 0x46 &&
                    p_c[3] == 0x46 && p_c[8] == 0x57 && p_c[9] == 0x41 &&
                    p_c[10] == 0x56 && p_c[11] == 0x45) {
                  printf("Arquivo: %s é do tipo WAV\n", argv[a]);
                } else {
                  if (p_c[0] == 0x52 && p_c[1] == 0x49 && p_c[2] == 0x46 &&
                      p_c[3] == 0x46 && p_c[8] == 0x41 && p_c[9] == 0x56 &&
                      p_c[10] == 0x49 && p_c[11] == 0x20) {
                    printf("Arquivo: %s é do tipo AVI\n", argv[a]);
                  } else {
                    if (p_c[0] == 0x4D && p_c[1] == 0x5A) {
                      printf("Arquivo: %s é do tipo EXE\n", argv[a]);
                    } else {
                      if (p_c[0] == 0x7F && p_c[1] == 0x45 && p_c[2] == 0x4C &&
                          p_c[3] == 0x46) {
                        printf("Arquivo: %s é do tipo ELF\n", argv[a]);
                      } else {
                        printf("Arquivo: %s não foi reconhecido\n", argv[a]);
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      fclose(arquivo);
      free(p_c);
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
cmpl   $0x1,-0x8(%rbp)
jne    11a1 <main+0x41>
lea    0xe79(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xeb4(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    16ba <main+0x55a>
movl   $0x1,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    16b5 <main+0x555>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
lea    0xea1(%rip),%rsi
call   1080 <fopen@plt>
mov    %rax,-0x20(%rbp)
cmpq   $0x0,-0x20(%rbp)
jne    11f5 <main+0x95>
lea    0xe88(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    16c1 <main+0x561>
movl   $0x1f4,-0x28(%rbp)
movq   $0x0,-0x30(%rbp)
movslq -0x28(%rbp),%rax
shl    $0x0,%rax
mov    %eax,%edi
call   1070 <malloc@plt>
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rdi
mov    -0x28(%rbp),%edx
mov    -0x20(%rbp),%rcx
mov    $0x1,%esi
call   1040 <fread@plt>
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x25,%eax
jne    1297 <main+0x137>
mov    -0x30(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x50,%eax
jne    1297 <main+0x137>
mov    -0x30(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x44,%eax
jne    1297 <main+0x137>
mov    -0x30(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x46,%eax
jne    1297 <main+0x137>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
lea    0xdf7(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1695 <main+0x535>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x89,%eax
jne    133f <main+0x1df>
mov    -0x30(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x50,%eax
jne    133f <main+0x1df>
mov    -0x30(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x4e,%eax
jne    133f <main+0x1df>
mov    -0x30(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x47,%eax
jne    133f <main+0x1df>
mov    -0x30(%rbp),%rax
movzbl 0x4(%rax),%eax
cmp    $0xd,%eax
jne    133f <main+0x1df>
mov    -0x30(%rbp),%rax
movzbl 0x5(%rax),%eax
cmp    $0xa,%eax
jne    133f <main+0x1df>
mov    -0x30(%rbp),%rax
movzbl 0x6(%rax),%eax
cmp    $0x1a,%eax
jne    133f <main+0x1df>
mov    -0x30(%rbp),%rax
movzbl 0x7(%rax),%eax
cmp    $0xa,%eax
jne    133f <main+0x1df>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
lea    0xd6b(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1690 <main+0x530>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x50,%eax
jne    13a1 <main+0x241>
mov    -0x30(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x4b,%eax
jne    13a1 <main+0x241>
mov    -0x30(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x3,%eax
jne    13a1 <main+0x241>
mov    -0x30(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x4,%eax
jne    13a1 <main+0x241>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
lea    0xd25(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    168b <main+0x52b>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x50,%eax
jne    1403 <main+0x2a3>
mov    -0x30(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x4b,%eax
jne    1403 <main+0x2a3>
mov    -0x30(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x5,%eax
jne    1403 <main+0x2a3>
mov    -0x30(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x6,%eax
jne    1403 <main+0x2a3>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
lea    0xcc3(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1686 <main+0x526>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x50,%eax
jne    1465 <main+0x305>
mov    -0x30(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x4b,%eax
jne    1465 <main+0x305>
mov    -0x30(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x7,%eax
jne    1465 <main+0x305>
mov    -0x30(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x8,%eax
jne    1465 <main+0x305>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
lea    0xc61(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1681 <main+0x521>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x52,%eax
jne    150b <main+0x3ab>
mov    -0x30(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x49,%eax
jne    150b <main+0x3ab>
mov    -0x30(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x46,%eax
jne    150b <main+0x3ab>
mov    -0x30(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x46,%eax
jne    150b <main+0x3ab>
mov    -0x30(%rbp),%rax
movzbl 0x8(%rax),%eax
cmp    $0x57,%eax
jne    150b <main+0x3ab>
mov    -0x30(%rbp),%rax
movzbl 0x9(%rax),%eax
cmp    $0x41,%eax
jne    150b <main+0x3ab>
mov    -0x30(%rbp),%rax
movzbl 0xa(%rax),%eax
cmp    $0x56,%eax
jne    150b <main+0x3ab>
mov    -0x30(%rbp),%rax
movzbl 0xb(%rax),%eax
cmp    $0x45,%eax
jne    150b <main+0x3ab>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
lea    0xbd7(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    167c <main+0x51c>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x52,%eax
jne    15b1 <main+0x451>
mov    -0x30(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x49,%eax
jne    15b1 <main+0x451>
mov    -0x30(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x46,%eax
jne    15b1 <main+0x451>
mov    -0x30(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x46,%eax
jne    15b1 <main+0x451>
mov    -0x30(%rbp),%rax
movzbl 0x8(%rax),%eax
cmp    $0x41,%eax
jne    15b1 <main+0x451>
mov    -0x30(%rbp),%rax
movzbl 0x9(%rax),%eax
cmp    $0x56,%eax
jne    15b1 <main+0x451>
mov    -0x30(%rbp),%rax
movzbl 0xa(%rax),%eax
cmp    $0x49,%eax
jne    15b1 <main+0x451>
mov    -0x30(%rbp),%rax
movzbl 0xb(%rax),%eax
cmp    $0x20,%eax
jne    15b1 <main+0x451>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
lea    0xb4d(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1677 <main+0x517>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x4d,%eax
jne    15f1 <main+0x491>
mov    -0x30(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x5a,%eax
jne    15f1 <main+0x491>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
lea    0xb29(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1672 <main+0x512>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x7f,%eax
jne    1653 <main+0x4f3>
mov    -0x30(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x45,%eax
jne    1653 <main+0x4f3>
mov    -0x30(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x4c,%eax
jne    1653 <main+0x4f3>
mov    -0x30(%rbp),%rax
movzbl 0x3(%rax),%eax
cmp    $0x46,%eax
jne    1653 <main+0x4f3>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
lea    0xae3(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    166d <main+0x50d>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
lea    0xae0(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1672 <main+0x512>
jmp    1677 <main+0x517>
jmp    167c <main+0x51c>
jmp    1681 <main+0x521>
jmp    1686 <main+0x526>
jmp    168b <main+0x52b>
jmp    1690 <main+0x530>
jmp    1695 <main+0x535>
mov    -0x20(%rbp),%rdi
call   1050 <fclose@plt>
mov    -0x30(%rbp),%rdi
call   1030 <free@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11a8 <main+0x48>
jmp    16ba <main+0x55a>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
cmp    $0x1,%edi
jne    119a <main+0x2a>
lea    0xf78(%rip),%rdi
call   1040 <puts@plt>
xor    %ebp,%ebp
lea    0xfb2(%rip),%rdi
jmp    1434 <main+0x2c4>
xor    %ebp,%ebp
cmp    $0x2,%edi
jl     1439 <main+0x2c9>
mov    %rsi,%r12
mov    %edi,%r14d
mov    $0x1,%r15d
xor    %ebp,%ebp
jmp    11ef <main+0x7f>
cs nopw 0x0(%rax,%rax,1)
nop
lea    0xeff(%rip),%rdi
mov    (%r12,%r15,8),%rsi
xor    %eax,%eax
call   1070 <printf@plt>
mov    %rbx,%rdi
call   1060 <fclose@plt>
mov    %r13,%rdi
call   1030 <free@plt>
add    $0x1,%r15
cmp    %r15,%r14
je     1439 <main+0x2c9>
mov    (%r12,%r15,8),%rdi
lea    0xe06(%rip),%rsi
call   1090 <fopen@plt>
test   %rax,%rax
je     1428 <main+0x2b8>
mov    %rax,%rbx
mov    $0x1f4,%edi
call   1080 <malloc@plt>
mov    %rax,%r13
mov    %rax,%rdi
mov    $0x1,%esi
mov    $0x1f4,%edx
mov    %rbx,%rcx
call   1050 <fread@plt>
movzbl 0x0(%r13),%eax
cmp    $0x4f,%al
jg     1270 <main+0x100>
cmp    $0x89,%al
je     12b5 <main+0x145>
cmp    $0x25,%al
je     130e <main+0x19e>
cmp    $0x4d,%al
jne    11c0 <main+0x50>
cmpb   $0x5a,0x1(%r13)
lea    0xe38(%rip),%rdi
jne    11c0 <main+0x50>
jmp    11c7 <main+0x57>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cmp    $0x50,%al
je     133b <main+0x1cb>
cmp    $0x52,%al
je     139a <main+0x22a>
cmp    $0x7f,%al
jne    11c0 <main+0x50>
cmpb   $0x45,0x1(%r13)
jne    11c0 <main+0x50>
cmpb   $0x4c,0x2(%r13)
jne    11c0 <main+0x50>
cmpb   $0x46,0x3(%r13)
lea    0xe00(%rip),%rdi
jne    11c0 <main+0x50>
jmp    11c7 <main+0x57>
cmpb   $0x50,0x1(%r13)
jne    11c0 <main+0x50>
cmpb   $0x4e,0x2(%r13)
jne    11c0 <main+0x50>
cmpb   $0x47,0x3(%r13)
jne    11c0 <main+0x50>
cmpb   $0xd,0x4(%r13)
jne    11c0 <main+0x50>
cmpb   $0xa,0x5(%r13)
jne    11c0 <main+0x50>
cmpb   $0x1a,0x6(%r13)
jne    11c0 <main+0x50>
cmpb   $0xa,0x7(%r13)
lea    0xd1b(%rip),%rdi
jne    11c0 <main+0x50>
jmp    11c7 <main+0x57>
cmpb   $0x50,0x1(%r13)
jne    11c0 <main+0x50>
cmpb   $0x44,0x2(%r13)
jne    11c0 <main+0x50>
cmpb   $0x46,0x3(%r13)
lea    0xcd2(%rip),%rdi
jne    11c0 <main+0x50>
jmp    11c7 <main+0x57>
cmpb   $0x4b,0x1(%r13)
jne    11c0 <main+0x50>
cmpb   $0x3,0x2(%r13)
jne    135f <main+0x1ef>
cmpb   $0x4,0x3(%r13)
lea    0xce1(%rip),%rdi
je     11c7 <main+0x57>
cmpb   $0x5,0x2(%r13)
jne    1378 <main+0x208>
cmpb   $0x6,0x3(%r13)
lea    0xcc8(%rip),%rdi
je     11c7 <main+0x57>
cmpb   $0x7,0x2(%r13)
jne    11c0 <main+0x50>
cmpb   $0x8,0x3(%r13)
lea    0xcab(%rip),%rdi
jne    11c0 <main+0x50>
jmp    11c7 <main+0x57>
cmpb   $0x49,0x1(%r13)
jne    11c0 <main+0x50>
cmpb   $0x46,0x2(%r13)
jne    13da <main+0x26a>
cmpb   $0x46,0x3(%r13)
jne    13da <main+0x26a>
cmpb   $0x57,0x8(%r13)
jne    13da <main+0x26a>
cmpb   $0x41,0x9(%r13)
jne    13da <main+0x26a>
cmpb   $0x56,0xa(%r13)
jne    13da <main+0x26a>
cmpb   $0x45,0xb(%r13)
lea    0xc82(%rip),%rdi
je     11c7 <main+0x57>
cmpb   $0x46,0x2(%r13)
jne    11c0 <main+0x50>
cmpb   $0x46,0x3(%r13)
jne    11c0 <main+0x50>
cmpb   $0x41,0x8(%r13)
jne    11c0 <main+0x50>
cmpb   $0x56,0x9(%r13)
jne    11c0 <main+0x50>
cmpb   $0x49,0xa(%r13)
jne    11c0 <main+0x50>
cmpb   $0x20,0xb(%r13)
lea    0xc55(%rip),%rdi
jne    11c0 <main+0x50>
jmp    11c7 <main+0x57>
mov    $0x1,%ebp
lea    0xcb4(%rip),%rdi
call   1040 <puts@plt>
mov    %ebp,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str.2 = [2 x i8] c"r\00"
@.str.4 = [28 x i8] c"Arquivo: %s \C3\A9 do tipo PDF\0A\00"
@.str.5 = [28 x i8] c"Arquivo: %s \C3\A9 do tipo PNG\0A\00"
@.str.6 = [28 x i8] c"Arquivo: %s \C3\A9 do tipo ZIP\0A\00"
@.str.7 = [28 x i8] c"Arquivo: %s \C3\A9 do tipo WAV\0A\00"
@.str.8 = [28 x i8] c"Arquivo: %s \C3\A9 do tipo AVI\0A\00"
@.str.9 = [28 x i8] c"Arquivo: %s \C3\A9 do tipo EXE\0A\00"
@.str.10 = [28 x i8] c"Arquivo: %s \C3\A9 do tipo ELF\0A\00"
@.str.11 = [34 x i8] c"Arquivo: %s n\C3\A3o foi reconhecido\0A\00"
@str = [23 x i8] c"Erro ao abrir arquivo!\00"
@str.12 = [72 x i8] c"Este programa tem o objetivo de listar o formato de um ou mais arquivos\00"
@str.13 = [30 x i8] c"Uso: tarefa <arquivo.formato>\00"
define i32 @main(i32 %0, i8** nocapture %1) {
%3 = icmp eq i32 %0, 1
br i1 %3, label %8, label %4
4: ; preds = %2
%5 = icmp sgt i32 %0, 1
br i1 %5, label %6, label %169
6: ; preds = %4
%7 = zext i32 %0 to i64
br label %10
8: ; preds = %2
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([72 x i8], [72 x i8]* @str.12, i64 0, i64 0))
br label %165
10: ; preds = %6, %157
%11 = phi i64 [ 1, %6 ], [ %163, %157 ]
%12 = getelementptr inbounds i8*, i8** %1, i64 %11
%13 = load i8*, i8** %12
%14 = tail call i32* @fopen(i8* %13, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.2, i64 0, i64 0))
%15 = icmp eq i32* %14, null
br i1 %15, label %165, label %16
16: ; preds = %10
%17 = tail call dereferenceable_or_null(500) i8* @malloc(i32 500)
%18 = tail call i32 @fread(i8* %17, i32 1, i32 500, i32* %14)
%19 = load i8, i8* %17
switch i8 %19, label %156 [
i8 37, label %20
i8 -119, label %32
i8 80, label %60
i8 82, label %88
i8 77, label %140
i8 127, label %144
]
20: ; preds = %16
%21 = getelementptr inbounds i8, i8* %17, i64 1
%22 = load i8, i8* %21
%23 = icmp eq i8 %22, 80
br i1 %23, label %24, label %156
24: ; preds = %20
%25 = getelementptr inbounds i8, i8* %17, i64 2
%26 = load i8, i8* %25
%27 = icmp eq i8 %26, 68
br i1 %27, label %28, label %156
28: ; preds = %24
%29 = getelementptr inbounds i8, i8* %17, i64 3
%30 = load i8, i8* %29
%31 = icmp eq i8 %30, 70
br i1 %31, label %157, label %156
32: ; preds = %16
%33 = getelementptr inbounds i8, i8* %17, i64 1
%34 = load i8, i8* %33
%35 = icmp eq i8 %34, 80
br i1 %35, label %36, label %156
36: ; preds = %32
%37 = getelementptr inbounds i8, i8* %17, i64 2
%38 = load i8, i8* %37
%39 = icmp eq i8 %38, 78
br i1 %39, label %40, label %156
40: ; preds = %36
%41 = getelementptr inbounds i8, i8* %17, i64 3
%42 = load i8, i8* %41
%43 = icmp eq i8 %42, 71
br i1 %43, label %44, label %156
44: ; preds = %40
%45 = getelementptr inbounds i8, i8* %17, i64 4
%46 = load i8, i8* %45
%47 = icmp eq i8 %46, 13
br i1 %47, label %48, label %156
48: ; preds = %44
%49 = getelementptr inbounds i8, i8* %17, i64 5
%50 = load i8, i8* %49
%51 = icmp eq i8 %50, 10
br i1 %51, label %52, label %156
52: ; preds = %48
%53 = getelementptr inbounds i8, i8* %17, i64 6
%54 = load i8, i8* %53
%55 = icmp eq i8 %54, 26
br i1 %55, label %56, label %156
56: ; preds = %52
%57 = getelementptr inbounds i8, i8* %17, i64 7
%58 = load i8, i8* %57
%59 = icmp eq i8 %58, 10
br i1 %59, label %157, label %156
60: ; preds = %16
%61 = getelementptr inbounds i8, i8* %17, i64 1
%62 = load i8, i8* %61
%63 = icmp eq i8 %62, 75
br i1 %63, label %64, label %156
64: ; preds = %60
%65 = getelementptr inbounds i8, i8* %17, i64 2
%66 = load i8, i8* %65
%67 = icmp eq i8 %66, 3
br i1 %67, label %68, label %72
68: ; preds = %64
%69 = getelementptr inbounds i8, i8* %17, i64 3
%70 = load i8, i8* %69
%71 = icmp eq i8 %70, 4
br i1 %71, label %157, label %72
72: ; preds = %68, %64
%73 = getelementptr inbounds i8, i8* %17, i64 2
%74 = load i8, i8* %73
%75 = icmp eq i8 %74, 5
br i1 %75, label %76, label %80
76: ; preds = %72
%77 = getelementptr inbounds i8, i8* %17, i64 3
%78 = load i8, i8* %77
%79 = icmp eq i8 %78, 6
br i1 %79, label %157, label %80
80: ; preds = %72, %76
%81 = getelementptr inbounds i8, i8* %17, i64 2
%82 = load i8, i8* %81
%83 = icmp eq i8 %82, 7
br i1 %83, label %84, label %156
84: ; preds = %80
%85 = getelementptr inbounds i8, i8* %17, i64 3
%86 = load i8, i8* %85
%87 = icmp eq i8 %86, 8
br i1 %87, label %157, label %156
88: ; preds = %16
%89 = getelementptr inbounds i8, i8* %17, i64 1
%90 = load i8, i8* %89
%91 = icmp eq i8 %90, 73
br i1 %91, label %92, label %156
92: ; preds = %88
%93 = getelementptr inbounds i8, i8* %17, i64 2
%94 = load i8, i8* %93
%95 = icmp eq i8 %94, 70
br i1 %95, label %96, label %116
96: ; preds = %92
%97 = getelementptr inbounds i8, i8* %17, i64 3
%98 = load i8, i8* %97
%99 = icmp eq i8 %98, 70
br i1 %99, label %100, label %116
100: ; preds = %96
%101 = getelementptr inbounds i8, i8* %17, i64 8
%102 = load i8, i8* %101
%103 = icmp eq i8 %102, 87
br i1 %103, label %104, label %116
104: ; preds = %100
%105 = getelementptr inbounds i8, i8* %17, i64 9
%106 = load i8, i8* %105
%107 = icmp eq i8 %106, 65
br i1 %107, label %108, label %116
108: ; preds = %104
%109 = getelementptr inbounds i8, i8* %17, i64 10
%110 = load i8, i8* %109
%111 = icmp eq i8 %110, 86
br i1 %111, label %112, label %116
112: ; preds = %108
%113 = getelementptr inbounds i8, i8* %17, i64 11
%114 = load i8, i8* %113
%115 = icmp eq i8 %114, 69
br i1 %115, label %157, label %116
116: ; preds = %92, %96, %100, %104, %108, %112
%117 = getelementptr inbounds i8, i8* %17, i64 2
%118 = load i8, i8* %117
%119 = icmp eq i8 %118, 70
br i1 %119, label %120, label %156
120: ; preds = %116
%121 = getelementptr inbounds i8, i8* %17, i64 3
%122 = load i8, i8* %121
%123 = icmp eq i8 %122, 70
br i1 %123, label %124, label %156
124: ; preds = %120
%125 = getelementptr inbounds i8, i8* %17, i64 8
%126 = load i8, i8* %125
%127 = icmp eq i8 %126, 65
br i1 %127, label %128, label %156
128: ; preds = %124
%129 = getelementptr inbounds i8, i8* %17, i64 9
%130 = load i8, i8* %129
%131 = icmp eq i8 %130, 86
br i1 %131, label %132, label %156
132: ; preds = %128
%133 = getelementptr inbounds i8, i8* %17, i64 10
%134 = load i8, i8* %133
%135 = icmp eq i8 %134, 73
br i1 %135, label %136, label %156
136: ; preds = %132
%137 = getelementptr inbounds i8, i8* %17, i64 11
%138 = load i8, i8* %137
%139 = icmp eq i8 %138, 32
br i1 %139, label %157, label %156
140: ; preds = %16
%141 = getelementptr inbounds i8, i8* %17, i64 1
%142 = load i8, i8* %141
%143 = icmp eq i8 %142, 90
br i1 %143, label %157, label %156
144: ; preds = %16
%145 = getelementptr inbounds i8, i8* %17, i64 1
%146 = load i8, i8* %145
%147 = icmp eq i8 %146, 69
br i1 %147, label %148, label %156
148: ; preds = %144
%149 = getelementptr inbounds i8, i8* %17, i64 2
%150 = load i8, i8* %149
%151 = icmp eq i8 %150, 76
br i1 %151, label %152, label %156
152: ; preds = %148
%153 = getelementptr inbounds i8, i8* %17, i64 3
%154 = load i8, i8* %153
%155 = icmp eq i8 %154, 70
br i1 %155, label %157, label %156
156: ; preds = %88, %60, %16, %32, %36, %40, %44, %48, %52, %56, %136, %132, %128, %124, %120, %116, %28, %24, %20, %84, %80, %140, %152, %148, %144
br label %157
157: ; preds = %152, %140, %136, %112, %84, %76, %68, %56, %28, %156
%158 = phi i8* [ getelementptr inbounds ([34 x i8], [34 x i8]* @.str.11, i64 0, i64 0), %156 ], [ getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0), %28 ], [ getelementptr inbounds ([28 x i8], [28 x i8]* @.str.5, i64 0, i64 0), %56 ], [ getelementptr inbounds ([28 x i8], [28 x i8]* @.str.6, i64 0, i64 0), %68 ], [ getelementptr inbounds ([28 x i8], [28 x i8]* @.str.6, i64 0, i64 0), %76 ], [ getelementptr inbounds ([28 x i8], [28 x i8]* @.str.6, i64 0, i64 0), %84 ], [ getelementptr inbounds ([28 x i8], [28 x i8]* @.str.7, i64 0, i64 0), %112 ], [ getelementptr inbounds ([28 x i8], [28 x i8]* @.str.8, i64 0, i64 0), %136 ], [ getelementptr inbounds ([28 x i8], [28 x i8]* @.str.9, i64 0, i64 0), %140 ], [ getelementptr inbounds ([28 x i8], [28 x i8]* @.str.10, i64 0, i64 0), %152 ]
%159 = load i8*, i8** %12
%160 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %158, i8* %159)
%161 = tail call i32 @fclose(i32* %14)
%162 = tail call i32 @free(i8* %17)
%163 = add nuw nsw i64 %11, 1
%164 = icmp eq i64 %163, %7
br i1 %164, label %169, label %10
165: ; preds = %10, %8
%166 = phi i8* [ getelementptr inbounds ([30 x i8], [30 x i8]* @str.13, i64 0, i64 0), %8 ], [ getelementptr inbounds ([23 x i8], [23 x i8]* @str, i64 0, i64 0), %10 ]
%167 = phi i32 [ 0, %8 ], [ 1, %10 ]
%168 = tail call i32 @puts(i8* dereferenceable(1) %166)
br label %169
169: ; preds = %157, %165, %4
%170 = phi i32 [ 0, %4 ], [ %167, %165 ], [ 0, %157 ]
ret i32 %170
}