#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ scanf(char *, int *);
void main() {
  int n, N = 1, P = 1, Q = 1;
  printf("Informe o valor de n: ");
  scanf("%d", &n);
  for (int i = 0, fat = 1; i <= n; i++) {
    for (int j = 0; j <= i; j++) {
      for (int k = 1; k <= i; k++) {
        N *= k;
      }
      for (int k = 1; k <= j; k++) {
        P *= k;
      }
      for (int k = 1; k <= (i - j); k++) {
        Q *= k;
      }
      printf(" %d ", N / (P * Q));
      N = P = Q = 1;
    }
    printf("\n");
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x1,-0x8(%rbp)
movl   $0x1,-0xc(%rbp)
movl   $0x1,-0x10(%rbp)
lea    0xebc(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xec5(%rip),%rdi
lea    -0x4(%rbp),%rsi
call   1040 <scanf@plt>
movl   $0x0,-0x14(%rbp)
movl   $0x1,-0x18(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x4(%rbp),%eax
jg     126a <main+0x14a>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     124e <main+0x12e>
movl   $0x1,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     11b3 <main+0x93>
mov    -0x20(%rbp),%eax
imul   -0x8(%rbp),%eax
mov    %eax,-0x8(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    118f <main+0x6f>
movl   $0x1,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     11de <main+0xbe>
mov    -0x24(%rbp),%eax
imul   -0xc(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11ba <main+0x9a>
movl   $0x1,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    -0x1c(%rbp),%ecx
cmp    %ecx,%eax
jg     120e <main+0xee>
mov    -0x28(%rbp),%eax
imul   -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11e5 <main+0xc5>
mov    -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   -0x10(%rbp),%ecx
cltd
idiv   %ecx
mov    %eax,%esi
lea    0xdf6(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x10(%rbp)
movl   $0x1,-0xc(%rbp)
movl   $0x1,-0x8(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    117c <main+0x5c>
lea    0xdca(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1169 <main+0x49>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
lea    0xf5b(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xf64(%rip),%rdi
lea    0x8(%rsp),%rsi
call   1050 <scanf@plt>
cmpl   $0x0,0x8(%rsp)
js     1961 <main+0x831>
mov    $0x1,%ebp
mov    $0xfffffff8,%r14d
xor    %ebx,%ebx
jmp    11a5 <main+0x75>
nopw   0x0(%rax,%rax,1)
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1(%rbx),%eax
add    $0x1,%ebp
mov    0xc(%rsp),%r14d
add    $0x1,%r14d
cmp    0x8(%rsp),%ebx
mov    %eax,%ebx
jge    1961 <main+0x831>
mov    %ebx,%ecx
and    $0xfffffff8,%ecx
add    $0xfffffff8,%ecx
shr    $0x3,%ecx
lea    0x1(%rcx),%eax
movzbl %al,%eax
and    $0x3,%eax
mov    %eax,0x10(%rsp)
add    $0x1,%ecx
and    $0xfffffffc,%ecx
mov    %rcx,0x20(%rsp)
mov    %ebx,%eax
and    $0x7ffffff8,%eax
lea    -0x8(%rax),%ecx
mov    %ecx,0x1c(%rsp)
shr    $0x3,%ecx
add    $0x1,%ecx
mov    %ecx,0x18(%rsp)
mov    %rax,0x28(%rsp)
add    $0x1,%eax
mov    %eax,0x14(%rsp)
xor    %r15d,%r15d
mov    %r14d,0xc(%rsp)
mov    $0xfffffff8,%r13d
mov    $0x1,%r12d
mov    %rbx,0x30(%rsp)
jmp    124a <main+0x11a>
nopw   0x0(%rax,%rax,1)
mov    $0x1,%ebx
imul   %ecx,%ebx
xor    %edx,%edx
div    %ebx
lea    0xe97(%rip),%rdi
mov    %eax,%esi
xor    %eax,%eax
call   1040 <printf@plt>
add    $0x1,%r15d
add    $0x1,%r12d
add    $0x1,%r13d
add    $0xffffffff,%r14d
cmp    %ebp,%r15d
mov    0x30(%rsp),%rbx
je     1180 <main+0x50>
mov    $0x1,%ecx
mov    $0x1,%eax
test   %ebx,%ebx
movdqa 0xdc1(%rip),%xmm9
movdqa 0xdc8(%rip),%xmm10
movdqa 0xdd0(%rip),%xmm7
movdqa 0xdd7(%rip),%xmm8
movdqa 0xddf(%rip),%xmm0
movdqa 0xde7(%rip),%xmm4
movdqa 0xdee(%rip),%xmm15
movdqa %xmm8,%xmm13
je     14ba <main+0x38a>
mov    $0x1,%edx
mov    $0x1,%eax
cmp    $0x8,%ebx
jb     14b0 <main+0x380>
movdqa %xmm0,%xmm14
movdqa 0xd53(%rip),%xmm0
movdqa 0xd3b(%rip),%xmm2
movdqa %xmm2,%xmm1
cmpl   $0x18,0x1c(%rsp)
movdqa 0xdb9(%rip),%xmm11
movdqa %xmm15,%xmm12
movdqa %xmm4,%xmm15
jb     13ea <main+0x2ba>
mov    0x20(%rsp),%rax
movdqa 0xd1c(%rip),%xmm0
movdqa 0xd04(%rip),%xmm2
movdqa %xmm2,%xmm1
movdqa %xmm0,%xmm3
paddd  %xmm9,%xmm3
pshufd $0xf5,%xmm1,%xmm4
pshufd $0xf5,%xmm0,%xmm5
pmuludq %xmm4,%xmm5
pmuludq %xmm0,%xmm1
pshufd $0xf5,%xmm2,%xmm4
pshufd $0xf5,%xmm3,%xmm6
pmuludq %xmm4,%xmm6
pmuludq %xmm2,%xmm3
movdqa %xmm0,%xmm2
paddd  %xmm10,%xmm2
movdqa %xmm0,%xmm4
paddd  %xmm7,%xmm4
pmuludq %xmm2,%xmm1
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm5,%xmm2
pmuludq %xmm4,%xmm3
pshufd $0xf5,%xmm4,%xmm4
pmuludq %xmm6,%xmm4
movdqa %xmm0,%xmm5
paddd  %xmm8,%xmm5
movdqa %xmm0,%xmm6
paddd  %xmm14,%xmm6
pshufd $0xf5,%xmm5,%xmm7
pmuludq %xmm2,%xmm7
pmuludq %xmm1,%xmm5
pshufd $0xf5,%xmm6,%xmm8
pmuludq %xmm4,%xmm8
pmuludq %xmm3,%xmm6
movdqa %xmm0,%xmm2
paddd  %xmm15,%xmm2
movdqa %xmm0,%xmm3
paddd  %xmm12,%xmm3
pmuludq %xmm2,%xmm5
pshufd $0xe8,%xmm5,%xmm1
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm7,%xmm2
movdqa 0xc8e(%rip),%xmm7
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
pmuludq %xmm3,%xmm6
pshufd $0xe8,%xmm6,%xmm2
pshufd $0xf5,%xmm3,%xmm3
pmuludq %xmm8,%xmm3
movdqa %xmm13,%xmm8
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
paddd  %xmm11,%xmm0
add    $0xfffffffc,%eax
jne    1300 <main+0x1d0>
movdqa %xmm1,%xmm3
movdqa %xmm2,%xmm4
testb  $0x3,0x18(%rsp)
je     145f <main+0x32f>
mov    0x10(%rsp),%eax
nopl   (%rax)
movdqa %xmm0,%xmm4
paddd  %xmm9,%xmm4
movdqa %xmm0,%xmm3
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pshufd $0xf5,%xmm1,%xmm1
pshufd $0xf5,%xmm0,%xmm5
pmuludq %xmm1,%xmm5
pshufd $0xe8,%xmm5,%xmm1
punpckldq %xmm1,%xmm3
pshufd $0xf5,%xmm4,%xmm1
pmuludq %xmm2,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm1
punpckldq %xmm1,%xmm4
paddd  %xmm10,%xmm0
movdqa %xmm3,%xmm1
movdqa %xmm4,%xmm2
add    $0xffffffff,%eax
jne    1400 <main+0x2d0>
pshufd $0xf5,%xmm3,%xmm0
pshufd $0xf5,%xmm4,%xmm1
pmuludq %xmm0,%xmm1
pmuludq %xmm3,%xmm4
pshufd $0xee,%xmm4,%xmm0
pmuludq %xmm4,%xmm0
pshufd $0xaa,%xmm1,%xmm2
pmuludq %xmm1,%xmm2
pmuludq %xmm0,%xmm2
movd   %xmm2,%eax
mov    0x14(%rsp),%edx
cmp    0x28(%rsp),%ebx
movdqa %xmm14,%xmm0
movdqa %xmm15,%xmm4
movdqa %xmm12,%xmm15
je     14ba <main+0x38a>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
imul   %edx,%eax
add    $0x1,%edx
cmp    %edx,%ebp
jne    14b0 <main+0x380>
test   %r15d,%r15d
je     170b <main+0x5db>
mov    $0x1,%esi
mov    $0x1,%ecx
cmp    $0x8,%r15d
jb     1700 <main+0x5d0>
mov    %r13d,%ecx
shr    $0x3,%ecx
lea    -0x8(%r15),%esi
mov    %esi,%edx
shr    $0x3,%edx
add    $0x1,%edx
movdqa %xmm0,%xmm14
movdqa 0xb1a(%rip),%xmm0
movdqa 0xb02(%rip),%xmm2
movdqa %xmm2,%xmm1
cmp    $0x18,%esi
movdqa 0xb82(%rip),%xmm11
movdqa %xmm4,%xmm12
jb     162a <main+0x4fa>
lea    0x1(%rcx),%esi
and    $0xfffffffc,%esi
movdqa 0xae9(%rip),%xmm0
movdqa 0xad1(%rip),%xmm2
movdqa %xmm2,%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movdqa %xmm0,%xmm3
paddd  %xmm9,%xmm3
pshufd $0xf5,%xmm1,%xmm4
pshufd $0xf5,%xmm0,%xmm5
pmuludq %xmm4,%xmm5
pmuludq %xmm0,%xmm1
pshufd $0xf5,%xmm2,%xmm4
pshufd $0xf5,%xmm3,%xmm6
pmuludq %xmm4,%xmm6
pmuludq %xmm2,%xmm3
movdqa %xmm0,%xmm2
paddd  %xmm10,%xmm2
movdqa %xmm0,%xmm4
paddd  %xmm7,%xmm4
pmuludq %xmm2,%xmm1
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm5,%xmm2
pmuludq %xmm4,%xmm3
pshufd $0xf5,%xmm4,%xmm4
pmuludq %xmm6,%xmm4
movdqa %xmm0,%xmm5
paddd  %xmm8,%xmm5
movdqa %xmm0,%xmm6
paddd  %xmm14,%xmm6
pshufd $0xf5,%xmm5,%xmm7
pmuludq %xmm2,%xmm7
pmuludq %xmm1,%xmm5
pshufd $0xf5,%xmm6,%xmm8
pmuludq %xmm4,%xmm8
pmuludq %xmm3,%xmm6
movdqa %xmm0,%xmm2
paddd  %xmm12,%xmm2
movdqa %xmm0,%xmm3
paddd  %xmm15,%xmm3
pmuludq %xmm2,%xmm5
pshufd $0xe8,%xmm5,%xmm1
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm7,%xmm2
movdqa 0xa4e(%rip),%xmm7
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
pmuludq %xmm3,%xmm6
pshufd $0xe8,%xmm6,%xmm2
pshufd $0xf5,%xmm3,%xmm3
pmuludq %xmm8,%xmm3
movdqa %xmm13,%xmm8
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
paddd  %xmm11,%xmm0
add    $0xfffffffc,%esi
jne    1540 <main+0x410>
mov    %r15d,%esi
and    $0xfffffff8,%esi
movdqa %xmm1,%xmm3
movdqa %xmm2,%xmm4
test   $0x3,%dl
je     16af <main+0x57f>
add    $0x1,%cl
movzbl %cl,%ecx
and    $0x3,%ecx
cs nopw 0x0(%rax,%rax,1)
movdqa %xmm0,%xmm4
paddd  %xmm9,%xmm4
movdqa %xmm0,%xmm3
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pshufd $0xf5,%xmm1,%xmm1
pshufd $0xf5,%xmm0,%xmm5
pmuludq %xmm1,%xmm5
pshufd $0xe8,%xmm5,%xmm1
punpckldq %xmm1,%xmm3
pshufd $0xf5,%xmm4,%xmm1
pmuludq %xmm2,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm1
punpckldq %xmm1,%xmm4
paddd  %xmm10,%xmm0
movdqa %xmm3,%xmm1
movdqa %xmm4,%xmm2
add    $0xffffffff,%ecx
jne    1650 <main+0x520>
pshufd $0xf5,%xmm3,%xmm0
pshufd $0xf5,%xmm4,%xmm1
pmuludq %xmm0,%xmm1
pmuludq %xmm3,%xmm4
pshufd $0xee,%xmm4,%xmm0
pmuludq %xmm4,%xmm0
pshufd $0xaa,%xmm1,%xmm2
pmuludq %xmm1,%xmm2
pmuludq %xmm0,%xmm2
movd   %xmm2,%ecx
cmp    %esi,%r15d
jne    16ec <main+0x5bc>
movdqa %xmm14,%xmm0
movdqa %xmm12,%xmm4
jmp    170b <main+0x5db>
or     $0x1,%esi
movdqa %xmm14,%xmm0
movdqa %xmm12,%xmm4
nopl   0x0(%rax)
imul   %esi,%ecx
add    $0x1,%esi
cmp    %esi,%r12d
jne    1700 <main+0x5d0>
mov    %ebx,%edx
sub    %r15d,%edx
jle    1210 <main+0xe0>
mov    %ebx,%edi
sub    %r15d,%edi
mov    $0x1,%esi
mov    $0x1,%ebx
cmp    $0x8,%edi
jb     1950 <main+0x820>
mov    %r14d,%r8d
shr    $0x3,%r8d
lea    -0x8(%rdi),%esi
mov    %esi,%ebx
shr    $0x3,%ebx
add    $0x1,%ebx
movdqa %xmm0,%xmm14
movdqa 0x8c3(%rip),%xmm0
movdqa 0x8ab(%rip),%xmm2
movdqa %xmm2,%xmm1
cmp    $0x18,%esi
movdqa 0x92b(%rip),%xmm11
jb     188d <main+0x75d>
lea    0x1(%r8),%esi
and    $0xfffffffc,%esi
movdqa 0x896(%rip),%xmm0
movdqa 0x87e(%rip),%xmm2
movdqa %xmm2,%xmm1
cs nopw 0x0(%rax,%rax,1)
movdqa %xmm0,%xmm3
paddd  %xmm9,%xmm3
movdqa %xmm15,%xmm12
movdqa %xmm4,%xmm15
pshufd $0xf5,%xmm1,%xmm4
pshufd $0xf5,%xmm0,%xmm5
pmuludq %xmm4,%xmm5
pmuludq %xmm0,%xmm1
pshufd $0xf5,%xmm2,%xmm4
pshufd $0xf5,%xmm3,%xmm6
pmuludq %xmm4,%xmm6
pmuludq %xmm2,%xmm3
movdqa %xmm0,%xmm2
paddd  %xmm10,%xmm2
movdqa %xmm0,%xmm4
paddd  %xmm7,%xmm4
pmuludq %xmm2,%xmm1
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm5,%xmm2
pmuludq %xmm4,%xmm3
pshufd $0xf5,%xmm4,%xmm4
pmuludq %xmm6,%xmm4
movdqa %xmm0,%xmm5
paddd  %xmm8,%xmm5
movdqa %xmm0,%xmm6
paddd  %xmm14,%xmm6
pshufd $0xf5,%xmm5,%xmm7
pmuludq %xmm2,%xmm7
pmuludq %xmm1,%xmm5
pshufd $0xf5,%xmm6,%xmm8
pmuludq %xmm4,%xmm8
movdqa %xmm15,%xmm4
movdqa %xmm12,%xmm15
pmuludq %xmm3,%xmm6
movdqa %xmm0,%xmm2
paddd  %xmm4,%xmm2
movdqa %xmm0,%xmm3
paddd  %xmm12,%xmm3
pmuludq %xmm2,%xmm5
pshufd $0xe8,%xmm5,%xmm1
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm7,%xmm2
movdqa 0x7eb(%rip),%xmm7
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
pmuludq %xmm3,%xmm6
pshufd $0xe8,%xmm6,%xmm2
pshufd $0xf5,%xmm3,%xmm3
pmuludq %xmm8,%xmm3
movdqa %xmm13,%xmm8
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm2
paddd  %xmm11,%xmm0
add    $0xfffffffc,%esi
jne    1790 <main+0x660>
mov    %edi,%esi
and    $0xfffffff8,%esi
movdqa %xmm1,%xmm3
movdqa %xmm2,%xmm4
test   $0x3,%bl
je     190f <main+0x7df>
add    $0x1,%r8b
movzbl %r8b,%ebx
and    $0x3,%ebx
nopw   0x0(%rax,%rax,1)
movdqa %xmm0,%xmm4
paddd  %xmm9,%xmm4
movdqa %xmm0,%xmm3
pmuludq %xmm1,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pshufd $0xf5,%xmm1,%xmm1
pshufd $0xf5,%xmm0,%xmm5
pmuludq %xmm1,%xmm5
pshufd $0xe8,%xmm5,%xmm1
punpckldq %xmm1,%xmm3
pshufd $0xf5,%xmm4,%xmm1
pmuludq %xmm2,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm1
punpckldq %xmm1,%xmm4
paddd  %xmm10,%xmm0
movdqa %xmm3,%xmm1
movdqa %xmm4,%xmm2
add    $0xffffffff,%ebx
jne    18b0 <main+0x780>
pshufd $0xf5,%xmm3,%xmm0
pshufd $0xf5,%xmm4,%xmm1
pmuludq %xmm0,%xmm1
pmuludq %xmm3,%xmm4
pshufd $0xee,%xmm4,%xmm0
pmuludq %xmm4,%xmm0
pshufd $0xaa,%xmm1,%xmm2
pmuludq %xmm1,%xmm2
pmuludq %xmm0,%xmm2
movd   %xmm2,%ebx
cmp    %esi,%edi
je     1215 <main+0xe5>
or     $0x1,%esi
cs nopw 0x0(%rax,%rax,1)
imul   %esi,%ebx
lea    0x1(%rsi),%edi
cmp    %edx,%esi
mov    %edi,%esi
jl     1950 <main+0x820>
jmp    1215 <main+0xe5>
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [23 x i8] c"Informe o valor de n: \00"
@.str.1 = [3 x i8] c"%d\00"
@.str.2 = [5 x i8] c" %d \00"
@.str.3 = [2 x i8] c"\0A\00"
define void @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store i32 1, i32* %2
store i32 1, i32* %3
store i32 1, i32* %4
%11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str, i64 0, i64 0))
%12 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %1)
store i32 0, i32* %5
store i32 1, i32* %6
br label %13
13: ; preds = %72, %0
%14 = load i32, i32* %5
%15 = load i32, i32* %1
%16 = icmp sle i32 %14, %15
br i1 %16, label %17, label %75
17: ; preds = %13
store i32 0, i32* %7
br label %18
18: ; preds = %67, %17
%19 = load i32, i32* %7
%20 = load i32, i32* %5
%21 = icmp sle i32 %19, %20
br i1 %21, label %22, label %70
22: ; preds = %18
store i32 1, i32* %8
br label %23
23: ; preds = %31, %22
%24 = load i32, i32* %8
%25 = load i32, i32* %5
%26 = icmp sle i32 %24, %25
br i1 %26, label %27, label %34
27: ; preds = %23
%28 = load i32, i32* %8
%29 = load i32, i32* %2
%30 = mul nsw i32 %29, %28
store i32 %30, i32* %2
br label %31
31: ; preds = %27
%32 = load i32, i32* %8
%33 = add nsw i32 %32, 1
store i32 %33, i32* %8
br label %23
34: ; preds = %23
store i32 1, i32* %9
br label %35
35: ; preds = %43, %34
%36 = load i32, i32* %9
%37 = load i32, i32* %7
%38 = icmp sle i32 %36, %37
br i1 %38, label %39, label %46
39: ; preds = %35
%40 = load i32, i32* %9
%41 = load i32, i32* %3
%42 = mul nsw i32 %41, %40
store i32 %42, i32* %3
br label %43
43: ; preds = %39
%44 = load i32, i32* %9
%45 = add nsw i32 %44, 1
store i32 %45, i32* %9
br label %35
46: ; preds = %35
store i32 1, i32* %10
br label %47
47: ; preds = %57, %46
%48 = load i32, i32* %10
%49 = load i32, i32* %5
%50 = load i32, i32* %7
%51 = sub nsw i32 %49, %50
%52 = icmp sle i32 %48, %51
br i1 %52, label %53, label %60
53: ; preds = %47
%54 = load i32, i32* %10
%55 = load i32, i32* %4
%56 = mul nsw i32 %55, %54
store i32 %56, i32* %4
br label %57
57: ; preds = %53
%58 = load i32, i32* %10
%59 = add nsw i32 %58, 1
store i32 %59, i32* %10
br label %47
60: ; preds = %47
%61 = load i32, i32* %2
%62 = load i32, i32* %3
%63 = load i32, i32* %4
%64 = mul nsw i32 %62, %63
%65 = sdiv i32 %61, %64
%66 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0), i32 %65)
store i32 1, i32* %4
store i32 1, i32* %3
store i32 1, i32* %2
br label %67
67: ; preds = %60
%68 = load i32, i32* %7
%69 = add nsw i32 %68, 1
store i32 %69, i32* %7
br label %18
70: ; preds = %18
%71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
br label %72
72: ; preds = %70
%73 = load i32, i32* %5
%74 = add nsw i32 %73, 1
store i32 %74, i32* %5
br label %13
75: ; preds = %13
ret void
}

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