#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*/ fgets(char *, int, int /*<<< orphan*/);
int /*<<< orphan*/ isdigit(char);
int /*<<< orphan*/ printf(char *);
int /*<<< orphan*/ sprintf(char *, char *, int);
int /*<<< orphan*/ stdin;
int main(void) {
  printf("Input a credit card to number to be validated\n");
  char input[16];
  fgets(input, 20, stdin);
  while (!isdigit(input[0])) {
    printf("Please insert numbers only\n");
    fgets(input, 20, stdin);
  }
  int inputSize = 0;
  int i;
  int n;
  for (i = 0; i < 20; i++) {
    n = input[i] - '0';
    if (n >= 0 && n <= 9) {
      inputSize++;
    }
  }
  char output[inputSize];
  for (i = 0; i < inputSize; i++) {
    output[i] = input[inputSize - i - 1];
  }
  char totalEvenStr[inputSize];
  int totalOdd = 0;
  int c = 0;
  for (i = 0; i < inputSize; i++) {
    n = output[i] - '0';
    if ((i + 1) % 2 == 0) {
      int even = (n * 2);
      char evenStr[2];
      sprintf(evenStr, "%d", even);
      int j;
      for (j = 0; j < 2; j++) {
        totalEvenStr[c] = evenStr[j];
        c++;
      }
    } else {
      totalOdd += n;
    }
  }
  int totalEven = 0;
  for (i = 0; i < inputSize; i++) {
    n = totalEvenStr[i] - '0';
    if (n > 0 && n <= 9) {
      totalEven += n;
    }
  }
  if ((totalEven + totalOdd) % 10 == 0) {
    int fn = input[0] - '0';
    int sn = input[1] - '0';
    if (fn == 3 && (sn == 4 || sn == 7)) {
      printf("AMEX\n");
    } else if (fn == 5 &&
               (sn == 1 || sn == 2 || sn == 3 || sn == 4 || sn == 5)) {
      printf("MASTERCARD\n");
    } else if (fn == 4) {
      printf("VISA\n");
    } else {
      printf("UNKNOWN\n");
    }
  } else {
    printf("INVALID\n");
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xea7(%rip),%rdi
call   1040 <printf@plt>
lea    -0x20(%rbp),%rdi
mov    0x2e7f(%rip),%rax
mov    (%rax),%edx
mov    $0x14,%esi
call   1050 <fgets@plt>
movsbl -0x20(%rbp),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
test   $0x1,%al
jne    1193 <main+0x53>
jmp    11bb <main+0x7b>
lea    0xe95(%rip),%rdi
call   1040 <printf@plt>
lea    -0x20(%rbp),%rdi
mov    0x2e3e(%rip),%rax
mov    (%rax),%edx
mov    $0x14,%esi
call   1050 <fgets@plt>
jmp    1175 <main+0x35>
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
cmpl   $0x14,-0x28(%rbp)
jge    1212 <main+0xd2>
movslq -0x28(%rbp),%rax
movsbl -0x20(%rbp,%rax,1),%eax
sub    $0x30,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jl     11ff <main+0xbf>
cmpl   $0x9,-0x2c(%rbp)
jg     11ff <main+0xbf>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1204 <main+0xc4>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11c9 <main+0x89>
mov    -0x24(%rbp),%eax
mov    %rsp,%rcx
mov    %rcx,-0x38(%rbp)
mov    %rax,%rdx
add    $0xf,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x70(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x40(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1274 <main+0x134>
mov    -0x70(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    -0x28(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    -0x20(%rbp,%rcx,1),%dl
movslq -0x28(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    123f <main+0xff>
mov    -0x24(%rbp),%eax
mov    %rax,%rdx
add    $0xf,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x78(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x48(%rbp)
movl   $0x0,-0x4c(%rbp)
movl   $0x0,-0x50(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1355 <main+0x215>
mov    -0x70(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    1339 <main+0x1f9>
mov    -0x2c(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x54(%rbp)
lea    -0x56(%rbp),%rdi
mov    -0x54(%rbp),%edx
lea    0xd57(%rip),%rsi
call   1060 <sprintf@plt>
movl   $0x0,-0x5c(%rbp)
cmpl   $0x2,-0x5c(%rbp)
jge    1334 <main+0x1f4>
mov    -0x78(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    -0x56(%rbp,%rcx,1),%dl
movslq -0x50(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    1300 <main+0x1c0>
jmp    1342 <main+0x202>
mov    -0x2c(%rbp),%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
jmp    1347 <main+0x207>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    12a8 <main+0x168>
movl   $0x0,-0x60(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    13b1 <main+0x271>
mov    -0x78(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x30,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jle    139e <main+0x25e>
cmpl   $0x9,-0x2c(%rbp)
jg     139e <main+0x25e>
mov    -0x2c(%rbp),%eax
add    -0x60(%rbp),%eax
mov    %eax,-0x60(%rbp)
jmp    13a3 <main+0x263>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1363 <main+0x223>
mov    -0x60(%rbp),%eax
add    -0x4c(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    148e <main+0x34e>
movsbl -0x20(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x64(%rbp)
movsbl -0x1f(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x68(%rbp)
cmpl   $0x3,-0x64(%rbp)
jne    140b <main+0x2cb>
cmpl   $0x4,-0x68(%rbp)
je     13fa <main+0x2ba>
cmpl   $0x7,-0x68(%rbp)
jne    140b <main+0x2cb>
lea    0xc4d(%rip),%rdi
call   1040 <printf@plt>
jmp    1489 <main+0x349>
cmpl   $0x5,-0x64(%rbp)
jne    1458 <main+0x318>
cmpl   $0x1,-0x68(%rbp)
je     1447 <main+0x307>
cmpl   $0x2,-0x68(%rbp)
je     1447 <main+0x307>
cmpl   $0x3,-0x68(%rbp)
je     1447 <main+0x307>
cmpl   $0x4,-0x68(%rbp)
je     1447 <main+0x307>
cmpl   $0x5,-0x68(%rbp)
jne    1458 <main+0x318>
lea    0xc06(%rip),%rdi
call   1040 <printf@plt>
jmp    1484 <main+0x344>
cmpl   $0x4,-0x64(%rbp)
jne    1473 <main+0x333>
lea    0xbf7(%rip),%rdi
call   1040 <printf@plt>
jmp    147f <main+0x33f>
lea    0xbec(%rip),%rdi
call   1040 <printf@plt>
jmp    1484 <main+0x344>
jmp    1489 <main+0x349>
jmp    149a <main+0x35a>
lea    0xbda(%rip),%rdi
call   1040 <printf@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,%rsp
mov    -0x4(%rbp),%eax
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
lea    0xf1b(%rip),%rdi
call   1040 <puts@plt>
mov    0x2e84(%rip),%r14
mov    (%r14),%edx
lea    -0x40(%rbp),%r12
mov    %r12,%rdi
mov    $0x14,%esi
call   1050 <fgets@plt>
movsbl -0x40(%rbp),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
jne    11b5 <main+0x75>
lea    0xf3a(%rip),%r15
lea    -0x40(%rbp),%rbx
mov    %r15,%rdi
call   1040 <puts@plt>
mov    (%r14),%edx
mov    %rbx,%rdi
mov    $0x14,%esi
call   1050 <fgets@plt>
movsbl -0x40(%rbp),%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     1190 <main+0x50>
movdqa -0x40(%rbp),%xmm1
movdqa -0x30(%rbp),%xmm0
paddb  0xe39(%rip),%xmm1
paddb  0xe41(%rip),%xmm0
mov    %rsp,%r13
movdqa 0xe46(%rip),%xmm2
pminub %xmm1,%xmm2
pcmpeqb %xmm1,%xmm2
pmovmskb %xmm2,%eax
mov    %eax,%ecx
shr    %ecx
and    $0x5555,%ecx
sub    %ecx,%eax
mov    %eax,%ecx
and    $0x3333,%ecx
shr    $0x2,%eax
and    $0x3333,%eax
add    %ecx,%eax
mov    %eax,%ecx
shr    $0x4,%ecx
add    %eax,%ecx
and    $0xf0f,%ecx
mov    %ecx,%eax
shl    $0x8,%eax
add    %ecx,%eax
movzbl %ah,%ebx
movdqa 0xe0d(%rip),%xmm1
pmaxub %xmm0,%xmm1
pcmpeqb %xmm0,%xmm1
pcmpeqd %xmm0,%xmm0
pxor   %xmm1,%xmm0
punpcklbw %xmm0,%xmm0
punpcklwd %xmm0,%xmm0
movmskps %xmm0,%eax
mov    %eax,%ecx
shr    %cl
and    $0x5,%cl
sub    %cl,%al
mov    %eax,%ecx
and    $0x33,%cl
shr    $0x2,%al
and    $0x33,%al
add    %cl,%al
mov    %eax,%ecx
shr    $0x4,%cl
add    %al,%cl
and    $0xf,%cl
movzbl %cl,%eax
lea    (%rbx,%rax,1),%ecx
add    $0xf,%ecx
add    %eax,%ebx
and    $0x70,%ecx
mov    %rsp,%rsi
sub    %rcx,%rsi
mov    %rsi,%rsp
test   %ebx,%ebx
je     13e2 <main+0x2a2>
cmp    $0x8,%ebx
jae    1288 <main+0x148>
xor    %eax,%eax
jmp    1352 <main+0x212>
cmp    $0x10,%ebx
jae    12e7 <main+0x1a7>
xor    %eax,%eax
mov    %rax,%rcx
mov    %ebx,%eax
and    $0x38,%eax
mov    %rbx,%rdx
sub    %rcx,%rdx
add    %rbp,%rdx
add    $0xffffffffffffffb8,%rdx
pxor   %xmm0,%xmm0
nopl   0x0(%rax,%rax,1)
movq   (%rdx),%xmm1
punpcklbw %xmm0,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm1,%xmm1
movq   %xmm1,(%rsi,%rcx,1)
add    $0x8,%rcx
add    $0xfffffffffffffff8,%rdx
cmp    %rcx,%rax
jne    12b0 <main+0x170>
cmp    %rbx,%rax
jne    1352 <main+0x212>
jmp    1373 <main+0x233>
mov    %ebx,%eax
and    $0x30,%eax
lea    (%rbx,%rbp,1),%rcx
add    $0xffffffffffffffb0,%rcx
xor    %edx,%edx
pxor   %xmm0,%xmm0
nopw   0x0(%rax,%rax,1)
movdqu (%rcx),%xmm1
movdqa %xmm1,%xmm2
punpcklbw %xmm0,%xmm2
pshufd $0x4e,%xmm2,%xmm2
pshuflw $0x1b,%xmm2,%xmm2
pshufhw $0x1b,%xmm2,%xmm2
punpckhbw %xmm0,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm2,%xmm1
movdqa %xmm1,(%rsi,%rdx,1)
add    $0x10,%rdx
add    $0xfffffffffffffff0,%rcx
cmp    %rdx,%rax
jne    1300 <main+0x1c0>
cmp    %rbx,%rax
je     1373 <main+0x233>
test   $0x8,%bl
jne    128f <main+0x14f>
mov    %rbx,%rcx
sub    %rax,%rcx
add    %r12,%rcx
add    $0xffffffffffffffff,%rcx
nop
movzbl (%rcx),%edx
mov    %dl,(%rsi,%rax,1)
add    $0x1,%rax
add    $0xffffffffffffffff,%rcx
cmp    %rbx,%rax
jb     1360 <main+0x220>
lea    0xf(%rbx),%eax
and    $0xfffffff0,%eax
mov    %rsp,%r14
sub    %rax,%r14
mov    %r14,%rsp
test   %rbx,%rbx
je     13e2 <main+0x2a2>
mov    %r13,-0x48(%rbp)
xor    %r12d,%r12d
xor    %r13d,%r13d
xor    %r15d,%r15d
mov    %rsi,-0x50(%rbp)
jmp    13a8 <main+0x268>
nopw   0x0(%rax,%rax,1)
add    %edx,%r15d
cmp    %rbx,%r12
jae    141f <main+0x2df>
movsbl (%rsi,%r12,1),%edx
add    $0xffffffd0,%edx
add    $0x1,%r12
test   $0x1,%r12b
jne    13a0 <main+0x260>
add    %edx,%edx
lea    -0x2a(%rbp),%rdi
lea    0xca9(%rip),%rsi
call   1060 <sprintf@plt>
mov    -0x50(%rbp),%rsi
movslq %r13d,%r13
movzwl -0x2a(%rbp),%eax
mov    %ax,(%r14,%r13,1)
add    $0x2,%r13d
jmp    13a3 <main+0x263>
xor    %r15d,%r15d
xor    %edx,%edx
add    %edx,%r15d
imul   $0xcccccccd,%r15d,%eax
add    $0x19999998,%eax
ror    %eax
cmp    $0x19999998,%eax
jbe    1438 <main+0x2f8>
lea    0xc9b(%rip),%rdi
call   1040 <puts@plt>
mov    %r13,%rsp
xor    %eax,%eax
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
test   %rbx,%rbx
mov    -0x48(%rbp),%r13
je     13e5 <main+0x2a5>
xor    %eax,%eax
cmp    $0x4,%ebx
jae    1477 <main+0x337>
xor    %ecx,%ecx
xor    %edx,%edx
jmp    15d0 <main+0x490>
movsbl -0x40(%rbp),%ecx
movsbl -0x3f(%rbp),%eax
cmp    $0x35,%ecx
je     15f2 <main+0x4b2>
cmp    $0x34,%ecx
je     162f <main+0x4ef>
cmp    $0x33,%ecx
jne    1623 <main+0x4e3>
cmp    $0x34,%al
lea    0xc5d(%rip),%rcx
lea    0xc3e(%rip),%rdi
cmove  %rcx,%rdi
cmp    $0x37,%al
cmove  %rcx,%rdi
jmp    1406 <main+0x2c6>
mov    %ebx,%ecx
and    $0x3c,%ecx
lea    -0x4(%rcx),%rsi
mov    %rsi,%rdx
shr    $0x2,%rdx
add    $0x1,%rdx
test   %rsi,%rsi
je     163b <main+0x4fb>
mov    %rdx,%rdi
and    $0xfffffffffffffffe,%rdi
pxor   %xmm0,%xmm0
xor    %esi,%esi
movdqa 0xb97(%rip),%xmm1
movdqa 0xb9f(%rip),%xmm2
pcmpeqd %xmm3,%xmm3
movdqa 0xba3(%rip),%xmm4
nopl   (%rax)
movq   (%r14,%rsi,1),%xmm5
punpcklbw %xmm5,%xmm6
paddb  %xmm1,%xmm5
movdqa %xmm5,%xmm7
pmaxub %xmm2,%xmm7
pcmpeqb %xmm5,%xmm7
pxor   %xmm3,%xmm7
punpcklbw %xmm7,%xmm5
punpcklwd %xmm5,%xmm5
psrad  $0x18,%xmm5
punpcklwd %xmm6,%xmm6
psrad  $0x18,%xmm6
paddd  %xmm4,%xmm6
pand   %xmm5,%xmm6
paddd  %xmm0,%xmm6
movd   0x4(%r14,%rsi,1),%xmm0
punpcklbw %xmm0,%xmm5
paddb  %xmm1,%xmm0
movdqa %xmm0,%xmm7
pmaxub %xmm2,%xmm7
pcmpeqb %xmm0,%xmm7
pxor   %xmm3,%xmm7
punpcklbw %xmm7,%xmm0
punpcklwd %xmm0,%xmm7
psrad  $0x18,%xmm7
punpcklwd %xmm5,%xmm0
psrad  $0x18,%xmm0
paddd  %xmm4,%xmm0
pand   %xmm7,%xmm0
paddd  %xmm6,%xmm0
add    $0x8,%rsi
add    $0xfffffffffffffffe,%rdi
jne    14c0 <main+0x380>
test   $0x1,%dl
je     15a8 <main+0x468>
movd   (%r14,%rsi,1),%xmm1
movdqa 0xade(%rip),%xmm2
paddb  %xmm1,%xmm2
movdqa 0xae2(%rip),%xmm3
pmaxub %xmm2,%xmm3
pcmpeqb %xmm2,%xmm3
pcmpeqd %xmm2,%xmm2
pxor   %xmm3,%xmm2
punpcklbw %xmm2,%xmm2
punpcklwd %xmm2,%xmm2
psrad  $0x18,%xmm2
punpcklbw %xmm1,%xmm1
punpcklwd %xmm1,%xmm1
psrad  $0x18,%xmm1
paddd  0xac0(%rip),%xmm1
pand   %xmm2,%xmm1
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%edx
cmp    %rbx,%rcx
je     13e7 <main+0x2a7>
nopw   0x0(%rax,%rax,1)
movsbl (%r14,%rcx,1),%esi
lea    -0x31(%rsi),%edi
add    $0xffffffd0,%esi
cmp    $0x9,%dil
cmovae %eax,%esi
add    %esi,%edx
add    $0x1,%rcx
cmp    %rbx,%rcx
jb     15d0 <main+0x490>
jmp    13e7 <main+0x2a7>
lea    -0x31(%rax),%ecx
lea    0xaba(%rip),%rdi
cmp    $0x2,%ecx
jb     1406 <main+0x2c6>
add    $0xffffffd0,%eax
cmp    $0x3,%eax
je     1406 <main+0x2c6>
cmp    $0x4,%eax
je     1406 <main+0x2c6>
cmp    $0x5,%eax
je     1406 <main+0x2c6>
lea    0xa7f(%rip),%rdi
jmp    1406 <main+0x2c6>
lea    0xa7b(%rip),%rdi
jmp    1406 <main+0x2c6>
pxor   %xmm0,%xmm0
xor    %esi,%esi
test   $0x1,%dl
jne    1554 <main+0x414>
jmp    15a8 <main+0x468>

LLVM IR (-O0):
@.str = [47 x i8] c"Input a credit card to number to be validated\0A\00"
@stdin = global i32 0
@.str.1 = [28 x i8] c"Please insert numbers only\0A\00"
@.str.2 = [3 x i8] c"%d\00"
@.str.3 = [6 x i8] c"AMEX\0A\00"
@.str.4 = [12 x i8] c"MASTERCARD\0A\00"
@.str.5 = [6 x i8] c"VISA\0A\00"
@.str.6 = [9 x i8] c"UNKNOWN\0A\00"
@.str.7 = [9 x i8] c"INVALID\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [16 x i8]
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i64
%8 = alloca i64
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca [2 x i8]
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
store i32 0, i32* %1
%17 = call i32 @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str, i64 0, i64 0))
%18 = getelementptr inbounds [16 x i8], [16 x i8]* %2, i64 0, i64 0
%19 = load i32, i32* @stdin
%20 = call i32 @fgets(i8* %18, i32 20, i32 %19)
br label %21
21: ; preds = %27, %0
%22 = getelementptr inbounds [16 x i8], [16 x i8]* %2, i64 0, i64 0
%23 = load i8, i8* %22
%24 = call i32 @isdigit(i8 signext %23)
%25 = icmp ne i32 %24, 0
%26 = xor i1 %25, true
br i1 %26, label %27, label %32
27: ; preds = %21
%28 = call i32 @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.1, i64 0, i64 0))
%29 = getelementptr inbounds [16 x i8], [16 x i8]* %2, i64 0, i64 0
%30 = load i32, i32* @stdin
%31 = call i32 @fgets(i8* %29, i32 20, i32 %30)
br label %21
32: ; preds = %21
store i32 0, i32* %3
store i32 0, i32* %4
br label %33
33: ; preds = %52, %32
%34 = load i32, i32* %4
%35 = icmp slt i32 %34, 20
br i1 %35, label %36, label %55
36: ; preds = %33
%37 = load i32, i32* %4
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds [16 x i8], [16 x i8]* %2, i64 0, i64 %38
%40 = load i8, i8* %39
%41 = sext i8 %40 to i32
%42 = sub nsw i32 %41, 48
store i32 %42, i32* %5
%43 = load i32, i32* %5
%44 = icmp sge i32 %43, 0
br i1 %44, label %45, label %51
45: ; preds = %36
%46 = load i32, i32* %5
%47 = icmp sle i32 %46, 9
br i1 %47, label %48, label %51
48: ; preds = %45
%49 = load i32, i32* %3
%50 = add nsw i32 %49, 1
store i32 %50, i32* %3
br label %51
51: ; preds = %48, %45, %36
br label %52
52: ; preds = %51
%53 = load i32, i32* %4
%54 = add nsw i32 %53, 1
store i32 %54, i32* %4
br label %33
55: ; preds = %33
%56 = load i32, i32* %3
%57 = zext i32 %56 to i64
%58 = call i8* @llvm.stacksave()
store i8* %58, i8** %6
%59 = alloca i8, i64 %57
store i64 %57, i64* %7
store i32 0, i32* %4
br label %60
60: ; preds = %75, %55
%61 = load i32, i32* %4
%62 = load i32, i32* %3
%63 = icmp slt i32 %61, %62
br i1 %63, label %64, label %78
64: ; preds = %60
%65 = load i32, i32* %3
%66 = load i32, i32* %4
%67 = sub nsw i32 %65, %66
%68 = sub nsw i32 %67, 1
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds [16 x i8], [16 x i8]* %2, i64 0, i64 %69
%71 = load i8, i8* %70
%72 = load i32, i32* %4
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds i8, i8* %59, i64 %73
store i8 %71, i8* %74
br label %75
75: ; preds = %64
%76 = load i32, i32* %4
%77 = add nsw i32 %76, 1
store i32 %77, i32* %4
br label %60
78: ; preds = %60
%79 = load i32, i32* %3
%80 = zext i32 %79 to i64
%81 = alloca i8, i64 %80
store i64 %80, i64* %8
store i32 0, i32* %9
store i32 0, i32* %10
store i32 0, i32* %4
br label %82
82: ; preds = %125, %78
%83 = load i32, i32* %4
%84 = load i32, i32* %3
%85 = icmp slt i32 %83, %84
br i1 %85, label %86, label %128
86: ; preds = %82
%87 = load i32, i32* %4
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds i8, i8* %59, i64 %88
%90 = load i8, i8* %89
%91 = sext i8 %90 to i32
%92 = sub nsw i32 %91, 48
store i32 %92, i32* %5
%93 = load i32, i32* %4
%94 = add nsw i32 %93, 1
%95 = srem i32 %94, 2
%96 = icmp eq i32 %95, 0
br i1 %96, label %97, label %120
97: ; preds = %86
%98 = load i32, i32* %5
%99 = mul nsw i32 %98, 2
store i32 %99, i32* %11
%100 = getelementptr inbounds [2 x i8], [2 x i8]* %12, i64 0, i64 0
%101 = load i32, i32* %11
%102 = call i32 @sprintf(i8* %100, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 %101)
store i32 0, i32* %13
br label %103
103: ; preds = %116, %97
%104 = load i32, i32* %13
%105 = icmp slt i32 %104, 2
br i1 %105, label %106, label %119
106: ; preds = %103
%107 = load i32, i32* %13
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds [2 x i8], [2 x i8]* %12, i64 0, i64 %108
%110 = load i8, i8* %109
%111 = load i32, i32* %10
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds i8, i8* %81, i64 %112
store i8 %110, i8* %113
%114 = load i32, i32* %10
%115 = add nsw i32 %114, 1
store i32 %115, i32* %10
br label %116
116: ; preds = %106
%117 = load i32, i32* %13
%118 = add nsw i32 %117, 1
store i32 %118, i32* %13
br label %103
119: ; preds = %103
br label %124
120: ; preds = %86
%121 = load i32, i32* %5
%122 = load i32, i32* %9
%123 = add nsw i32 %122, %121
store i32 %123, i32* %9
br label %124
124: ; preds = %120, %119
br label %125
125: ; preds = %124
%126 = load i32, i32* %4
%127 = add nsw i32 %126, 1
store i32 %127, i32* %4
br label %82
128: ; preds = %82
store i32 0, i32* %14
store i32 0, i32* %4
br label %129
129: ; preds = %150, %128
%130 = load i32, i32* %4
%131 = load i32, i32* %3
%132 = icmp slt i32 %130, %131
br i1 %132, label %133, label %153
133: ; preds = %129
%134 = load i32, i32* %4
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds i8, i8* %81, i64 %135
%137 = load i8, i8* %136
%138 = sext i8 %137 to i32
%139 = sub nsw i32 %138, 48
store i32 %139, i32* %5
%140 = load i32, i32* %5
%141 = icmp sgt i32 %140, 0
br i1 %141, label %142, label %149
142: ; preds = %133
%143 = load i32, i32* %5
%144 = icmp sle i32 %143, 9
br i1 %144, label %145, label %149
145: ; preds = %142
%146 = load i32, i32* %5
%147 = load i32, i32* %14
%148 = add nsw i32 %147, %146
store i32 %148, i32* %14
br label %149
149: ; preds = %145, %142, %133
br label %150
150: ; preds = %149
%151 = load i32, i32* %4
%152 = add nsw i32 %151, 1
store i32 %152, i32* %4
br label %129
153: ; preds = %129
%154 = load i32, i32* %14
%155 = load i32, i32* %9
%156 = add nsw i32 %154, %155
%157 = srem i32 %156, 10
%158 = icmp eq i32 %157, 0
br i1 %158, label %159, label %208
159: ; preds = %153
%160 = getelementptr inbounds [16 x i8], [16 x i8]* %2, i64 0, i64 0
%161 = load i8, i8* %160
%162 = sext i8 %161 to i32
%163 = sub nsw i32 %162, 48
store i32 %163, i32* %15
%164 = getelementptr inbounds [16 x i8], [16 x i8]* %2, i64 0, i64 1
%165 = load i8, i8* %164
%166 = sext i8 %165 to i32
%167 = sub nsw i32 %166, 48
store i32 %167, i32* %16
%168 = load i32, i32* %15
%169 = icmp eq i32 %168, 3
br i1 %169, label %170, label %178
170: ; preds = %159
%171 = load i32, i32* %16
%172 = icmp eq i32 %171, 4
br i1 %172, label %176, label %173
173: ; preds = %170
%174 = load i32, i32* %16
%175 = icmp eq i32 %174, 7
br i1 %175, label %176, label %178
176: ; preds = %173, %170
%177 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
br label %207
178: ; preds = %173, %159
%179 = load i32, i32* %15
%180 = icmp eq i32 %179, 5
br i1 %180, label %181, label %198
181: ; preds = %178
%182 = load i32, i32* %16
%183 = icmp eq i32 %182, 1
br i1 %183, label %196, label %184
184: ; preds = %181
%185 = load i32, i32* %16
%186 = icmp eq i32 %185, 2
br i1 %186, label %196, label %187
187: ; preds = %184
%188 = load i32, i32* %16
%189 = icmp eq i32 %188, 3
br i1 %189, label %196, label %190
190: ; preds = %187
%191 = load i32, i32* %16
%192 = icmp eq i32 %191, 4
br i1 %192, label %196, label %193
193: ; preds = %190
%194 = load i32, i32* %16
%195 = icmp eq i32 %194, 5
br i1 %195, label %196, label %198
196: ; preds = %193, %190, %187, %184, %181
%197 = call i32 @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.4, i64 0, i64 0))
br label %206
198: ; preds = %193, %178
%199 = load i32, i32* %15
%200 = icmp eq i32 %199, 4
br i1 %200, label %201, label %203
201: ; preds = %198
%202 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
br label %205
203: ; preds = %198
%204 = call i32 @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.6, i64 0, i64 0))
br label %205
205: ; preds = %203, %201
br label %206
206: ; preds = %205, %196
br label %207
207: ; preds = %206, %176
br label %210
208: ; preds = %153
%209 = call i32 @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.7, i64 0, i64 0))
br label %210
210: ; preds = %208, %207
store i32 0, i32* %1
%211 = load i8*, i8** %6
%212 = load i32, i32* %1
ret i32 %212
}

LLVM IR (-O2):
@stdin = global i32 0
@.str.2 = [3 x i8] c"%d\00"
@str = [46 x i8] c"Input a credit card to number to be validated\00"
@str.8 = [8 x i8] c"INVALID\00"
@str.9 = [8 x i8] c"UNKNOWN\00"
@str.10 = [5 x i8] c"VISA\00"
@str.11 = [11 x i8] c"MASTERCARD\00"
@str.12 = [5 x i8] c"AMEX\00"
@str.13 = [27 x i8] c"Please insert numbers only\00"
define i32 @main() {
%1 = alloca <16 x i8>
%2 = alloca i16
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str, i64 0, i64 0))
%4 = getelementptr inbounds <16 x i8>, <16 x i8>* %1, i64 0, i64 0
%5 = load i32, i32* @stdin
%6 = call i32 @fgets(i8* %4, i32 20, i32 %5)
%7 = load i8, i8* %4
%8 = call i32 @isdigit(i8 signext %7)
%9 = icmp eq i32 %8, 0
br i1 %9, label %31, label %10
10: ; preds = %31, %0
%11 = getelementptr inbounds <16 x i8>, <16 x i8>* %1, i64 0, i64 1
%12 = load <16 x i8>, <16 x i8>* %1
%13 = add <16 x i8> %12, <i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48, i8 -48>
%14 = icmp ult <16 x i8> %13, <i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10, i8 10>
%15 = getelementptr inbounds <16 x i8>, <16 x i8>* %1, i64 0, i64 16
%16 = bitcast i8* %15 to <4 x i8>*
%17 = load <4 x i8>, <4 x i8>* %16
%18 = add <4 x i8> %17, <i8 -48, i8 -48, i8 -48, i8 -48>
%19 = icmp ult <4 x i8> %18, <i8 10, i8 10, i8 10, i8 10>
%20 = bitcast <16 x i1> %14 to i16
%21 = call i16 @llvm.ctpop.i16(i16 %20)
%22 = zext i16 %21 to i32
%23 = bitcast <4 x i1> %19 to i4
%24 = call i4 @llvm.ctpop.i4(i4 %23)
%25 = zext i4 %24 to i32
%26 = add nuw nsw i32 %22, %25
%27 = zext i32 %26 to i64
%28 = call i8* @llvm.stacksave()
%29 = alloca i8, i64 %27
%30 = icmp eq i32 %26, 0
br i1 %30, label %194, label %38
31: ; preds = %0, %31
%32 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @str.13, i64 0, i64 0))
%33 = load i32, i32* @stdin
%34 = call i32 @fgets(i8* %4, i32 20, i32 %33)
%35 = load i8, i8* %4
%36 = call i32 @isdigit(i8 signext %35)
%37 = icmp eq i32 %36, 0
br i1 %37, label %31, label %10
38: ; preds = %10
%39 = zext i32 %26 to i64
%40 = icmp ult i32 %26, 8
br i1 %40, label %81, label %41
41: ; preds = %38
%42 = icmp ult i32 %26, 16
br i1 %42, label %63, label %43
43: ; preds = %41
%44 = and i64 %27, 48
br label %45
45: ; preds = %45, %43
%46 = phi i64 [ 0, %43 ], [ %56, %45 ]
%47 = xor i64 %46, -1
%48 = add nsw i64 %39, %47
%49 = getelementptr inbounds <16 x i8>, <16 x i8>* %1, i64 0, i64 %48
%50 = getelementptr inbounds i8, i8* %49, i64 -15
%51 = bitcast i8* %50 to <16 x i8>*
%52 = load <16 x i8>, <16 x i8>* %51
%53 = shufflevector <16 x i8> %52, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%54 = getelementptr inbounds i8, i8* %29, i64 %46
%55 = bitcast i8* %54 to <16 x i8>*
store <16 x i8> %53, <16 x i8>* %55
%56 = add nuw i64 %46, 16
%57 = icmp eq i64 %56, %44
br i1 %57, label %58, label %45
58: ; preds = %45
%59 = icmp eq i64 %44, %27
br i1 %59, label %92, label %60
60: ; preds = %58
%61 = and i64 %27, 8
%62 = icmp eq i64 %61, 0
br i1 %62, label %81, label %63
63: ; preds = %41, %60
%64 = phi i64 [ %44, %60 ], [ 0, %41 ]
%65 = and i64 %27, 56
br label %66
66: ; preds = %66, %63
%67 = phi i64 [ %64, %63 ], [ %77, %66 ]
%68 = xor i64 %67, -1
%69 = add nsw i64 %39, %68
%70 = getelementptr inbounds <16 x i8>, <16 x i8>* %1, i64 0, i64 %69
%71 = getelementptr inbounds i8, i8* %70, i64 -7
%72 = bitcast i8* %71 to <8 x i8>*
%73 = load <8 x i8>, <8 x i8>* %72
%74 = shufflevector <8 x i8> %73, <8 x i8> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%75 = getelementptr inbounds i8, i8* %29, i64 %67
%76 = bitcast i8* %75 to <8 x i8>*
store <8 x i8> %74, <8 x i8>* %76
%77 = add nuw i64 %67, 8
%78 = icmp eq i64 %77, %65
br i1 %78, label %79, label %66
79: ; preds = %66
%80 = icmp eq i64 %65, %27
br i1 %80, label %92, label %81
81: ; preds = %38, %60, %79
%82 = phi i64 [ 0, %38 ], [ %44, %60 ], [ %65, %79 ]
br label %83
83: ; preds = %81, %83
%84 = phi i64 [ %90, %83 ], [ %82, %81 ]
%85 = xor i64 %84, -1
%86 = add nsw i64 %39, %85
%87 = getelementptr inbounds <16 x i8>, <16 x i8>* %1, i64 0, i64 %86
%88 = load i8, i8* %87
%89 = getelementptr inbounds i8, i8* %29, i64 %84
store i8 %88, i8* %89
%90 = add nuw nsw i64 %84, 1
%91 = icmp ult i64 %90, %27
br i1 %91, label %83, label %92
92: ; preds = %83, %79, %58
%93 = alloca i8, i64 %27
br i1 %30, label %194, label %94
94: ; preds = %92
%95 = bitcast i16* %2 to i8*
br label %156
96: ; preds = %177
br i1 %30, label %194, label %97
97: ; preds = %96
%98 = icmp ult i32 %26, 4
br i1 %98, label %153, label %99
99: ; preds = %97
%100 = and i64 %27, 60
%101 = add nsw i64 %100, -4
%102 = lshr exact i64 %101, 2
%103 = add nuw nsw i64 %102, 1
%104 = and i64 %103, 1
%105 = icmp eq i64 %101, 0
br i1 %105, label %134, label %106
106: ; preds = %99
%107 = and i64 %103, 9223372036854775806
br label %108
108: ; preds = %108, %106
%109 = phi i64 [ 0, %106 ], [ %131, %108 ]
%110 = phi <4 x i32> [ zeroinitializer, %106 ], [ %130, %108 ]
%111 = phi i64 [ 0, %106 ], [ %132, %108 ]
%112 = getelementptr inbounds i8, i8* %93, i64 %109
%113 = bitcast i8* %112 to <4 x i8>*
%114 = load <4 x i8>, <4 x i8>* %113
%115 = add <4 x i8> %114, <i8 -49, i8 -49, i8 -49, i8 -49>
%116 = icmp ult <4 x i8> %115, <i8 9, i8 9, i8 9, i8 9>
%117 = sext <4 x i8> %114 to <4 x i32>
%118 = add nsw <4 x i32> %117, <i32 -48, i32 -48, i32 -48, i32 -48>
%119 = select <4 x i1> %116, <4 x i32> %118, <4 x i32> zeroinitializer
%120 = add <4 x i32> %119, %110
%121 = or i64 %109, 4
%122 = getelementptr inbounds i8, i8* %93, i64 %121
%123 = bitcast i8* %122 to <4 x i8>*
%124 = load <4 x i8>, <4 x i8>* %123
%125 = add <4 x i8> %124, <i8 -49, i8 -49, i8 -49, i8 -49>
%126 = icmp ult <4 x i8> %125, <i8 9, i8 9, i8 9, i8 9>
%127 = sext <4 x i8> %124 to <4 x i32>
%128 = add nsw <4 x i32> %127, <i32 -48, i32 -48, i32 -48, i32 -48>
%129 = select <4 x i1> %126, <4 x i32> %128, <4 x i32> zeroinitializer
%130 = add <4 x i32> %129, %120
%131 = add nuw i64 %109, 8
%132 = add i64 %111, 2
%133 = icmp eq i64 %132, %107
br i1 %133, label %134, label %108
134: ; preds = %108, %99
%135 = phi <4 x i32> [ undef, %99 ], [ %130, %108 ]
%136 = phi i64 [ 0, %99 ], [ %131, %108 ]
%137 = phi <4 x i32> [ zeroinitializer, %99 ], [ %130, %108 ]
%138 = icmp eq i64 %104, 0
br i1 %138, label %149, label %139
139: ; preds = %134
%140 = getelementptr inbounds i8, i8* %93, i64 %136
%141 = bitcast i8* %140 to <4 x i8>*
%142 = load <4 x i8>, <4 x i8>* %141
%143 = add <4 x i8> %142, <i8 -49, i8 -49, i8 -49, i8 -49>
%144 = icmp ult <4 x i8> %143, <i8 9, i8 9, i8 9, i8 9>
%145 = sext <4 x i8> %142 to <4 x i32>
%146 = add nsw <4 x i32> %145, <i32 -48, i32 -48, i32 -48, i32 -48>
%147 = select <4 x i1> %144, <4 x i32> %146, <4 x i32> zeroinitializer
%148 = add <4 x i32> %147, %137
br label %149
149: ; preds = %134, %139
%150 = phi <4 x i32> [ %135, %134 ], [ %148, %139 ]
%151 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %150)
%152 = icmp eq i64 %100, %27
br i1 %152, label %194, label %153
153: ; preds = %97, %149
%154 = phi i64 [ 0, %97 ], [ %100, %149 ]
%155 = phi i32 [ 0, %97 ], [ %151, %149 ]
br label %181
156: ; preds = %94, %177
%157 = phi i64 [ 0, %94 ], [ %164, %177 ]
%158 = phi i32 [ 0, %94 ], [ %179, %177 ]
%159 = phi i32 [ 0, %94 ], [ %178, %177 ]
%160 = getelementptr inbounds i8, i8* %29, i64 %157
%161 = load i8, i8* %160
%162 = sext i8 %161 to i32
%163 = add nsw i32 %162, -48
%164 = add nuw nsw i64 %157, 1
%165 = and i64 %164, 1
%166 = icmp eq i64 %165, 0
br i1 %166, label %167, label %175
167: ; preds = %156
%168 = shl nsw i32 %163, 1
%169 = call i32 @sprintf(i8* %95, i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 %168)
%170 = sext i32 %158 to i64
%171 = getelementptr i8, i8* %93, i64 %170
%172 = bitcast i8* %171 to i16*
%173 = load i16, i16* %2
store i16 %173, i16* %172
%174 = add i32 %158, 2
br label %177
175: ; preds = %156
%176 = add nsw i32 %163, %159
br label %177
177: ; preds = %167, %175
%178 = phi i32 [ %159, %167 ], [ %176, %175 ]
%179 = phi i32 [ %174, %167 ], [ %158, %175 ]
%180 = icmp ult i64 %164, %27
br i1 %180, label %156, label %96
181: ; preds = %153, %181
%182 = phi i64 [ %192, %181 ], [ %154, %153 ]
%183 = phi i32 [ %191, %181 ], [ %155, %153 ]
%184 = getelementptr inbounds i8, i8* %93, i64 %182
%185 = load i8, i8* %184
%186 = add i8 %185, -49
%187 = icmp ult i8 %186, 9
%188 = sext i8 %185 to i32
%189 = add nsw i32 %188, -48
%190 = select i1 %187, i32 %189, i32 0
%191 = add nsw i32 %190, %183
%192 = add nuw nsw i64 %182, 1
%193 = icmp ult i64 %192, %27
br i1 %193, label %181, label %194
194: ; preds = %181, %149, %10, %92, %96
%195 = phi i32 [ %178, %96 ], [ 0, %92 ], [ 0, %10 ], [ %178, %149 ], [ %178, %181 ]
%196 = phi i32 [ 0, %96 ], [ 0, %92 ], [ 0, %10 ], [ %151, %149 ], [ %191, %181 ]
%197 = add nsw i32 %196, %195
%198 = srem i32 %197, 10
%199 = icmp eq i32 %198, 0
br i1 %199, label %200, label %221
200: ; preds = %194
%201 = load i8, i8* %4
%202 = sext i8 %201 to i32
%203 = load i8, i8* %11
%204 = sext i8 %203 to i32
%205 = add nsw i32 %204, -48
switch i32 %202, label %220 [
i32 51, label %206
i32 53, label %211
i32 52, label %221
]
206: ; preds = %200
%207 = icmp eq i8 %203, 55
%208 = icmp eq i8 %203, 52
%209 = or i1 %207, %208
%210 = select i1 %209, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @str.12, i64 0, i64 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @str.9, i64 0, i64 0)
br label %221
211: ; preds = %200
%212 = add nsw i32 %204, -49
%213 = icmp ult i32 %212, 2
%214 = icmp eq i32 %205, 3
%215 = select i1 %213, i1 true, i1 %214
%216 = icmp eq i32 %205, 4
%217 = select i1 %215, i1 true, i1 %216
%218 = icmp eq i32 %205, 5
%219 = select i1 %217, i1 true, i1 %218
br i1 %219, label %221, label %220
220: ; preds = %211, %200
br label %221
221: ; preds = %194, %200, %211, %206, %220
%222 = phi i8* [ getelementptr inbounds ([8 x i8], [8 x i8]* @str.9, i64 0, i64 0), %220 ], [ %210, %206 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @str.11, i64 0, i64 0), %211 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @str.10, i64 0, i64 0), %200 ], [ getelementptr inbounds ([8 x i8], [8 x i8]* @str.8, i64 0, i64 0), %194 ]
%223 = call i32 @puts(i8* dereferenceable(1) %222)
ret i32 0
}