int ccverf(char *card, int type) {
  int ccnumber[16];
  int final = 0;
  int digits = 0;
  int counter;
  int len;
  int start;
  int twice;
  for (len = strlen(card), counter = 0; len >= counter; counter++) {
    if ((isdigit(card[counter])) != 0) {
      if (digits == 17) {
        return (0);
      }
      ccnumber[digits] = ((card[counter]) - 48);
      digits++;
    }
  }
  if ((digits != 13) && (digits != 15) && (digits != 16)) {
    return (0);
  }
  if (digits == 13) {
    if (type != 1) {
      return (0);
    }
    if ((type == 1) && (ccnumber[0] != 4)) {
      return (0);
    }
    start = 1;
  }
  if (digits == 15) {
    if (type != 3) {
      return (0);
    }
    if ((type == 3) && (ccnumber[0] != 3)) {
      return (0);
    }
    start = 1;
  }
  if (digits == 16) {
    if ((type != 1) && (type != 2) && (type != 4)) {
      return (0);
    }
    if ((type == 1) && (ccnumber[0] != 4)) {
      return (0);
    }
    if ((type == 2) && (ccnumber[0] != 5)) {
      return (0);
    }
    if ((type == 4) && (ccnumber[0] != 6)) {
      return (0);
    }
    start = 0;
  }
  for (counter = start; counter < digits; counter += 2) {
    twice = ccnumber[counter] * 2;
    if (twice >= 10) {
      ccnumber[counter] = twice - 9;
    } else {
      ccnumber[counter] = twice;
    }
  }
  for (counter = 0; counter < digits; counter++) {
    final += ccnumber[counter];
  }
  if ((final % 10) != 0) {
    return (0);
  } else {
    return (1);
  }
}


x86 assembly (clang, -O0):
<ccverf>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
movl   $0x0,-0x64(%rbp)
movl   $0x0,-0x68(%rbp)
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,-0x70(%rbp)
movl   $0x0,-0x6c(%rbp)
mov    -0x70(%rbp),%eax
cmp    -0x6c(%rbp),%eax
jl     11c2 <ccverf+0xa2>
mov    -0x10(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsbl (%rax,%rcx,1),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
je     11af <ccverf+0x8f>
cmpl   $0x11,-0x68(%rbp)
jne    118f <ccverf+0x6f>
movl   $0x0,-0x4(%rbp)
jmp    13c6 <ccverf+0x2a6>
mov    -0x10(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
sub    $0x30,%ecx
movslq -0x68(%rbp),%rax
mov    %ecx,-0x60(%rbp,%rax,4)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    11b4 <ccverf+0x94>
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    1153 <ccverf+0x33>
cmpl   $0xd,-0x68(%rbp)
je     11ec <ccverf+0xcc>
cmpl   $0xf,-0x68(%rbp)
je     11ec <ccverf+0xcc>
cmpl   $0x10,-0x68(%rbp)
je     11ec <ccverf+0xcc>
movl   $0x0,-0x4(%rbp)
jmp    13c6 <ccverf+0x2a6>
cmpl   $0xd,-0x68(%rbp)
jne    1233 <ccverf+0x113>
cmpl   $0x1,-0x14(%rbp)
je     120c <ccverf+0xec>
movl   $0x0,-0x4(%rbp)
jmp    13c6 <ccverf+0x2a6>
cmpl   $0x1,-0x14(%rbp)
jne    122c <ccverf+0x10c>
cmpl   $0x4,-0x60(%rbp)
je     122c <ccverf+0x10c>
movl   $0x0,-0x4(%rbp)
jmp    13c6 <ccverf+0x2a6>
movl   $0x1,-0x74(%rbp)
cmpl   $0xf,-0x68(%rbp)
jne    127a <ccverf+0x15a>
cmpl   $0x3,-0x14(%rbp)
je     1253 <ccverf+0x133>
movl   $0x0,-0x4(%rbp)
jmp    13c6 <ccverf+0x2a6>
cmpl   $0x3,-0x14(%rbp)
jne    1273 <ccverf+0x153>
cmpl   $0x3,-0x60(%rbp)
je     1273 <ccverf+0x153>
movl   $0x0,-0x4(%rbp)
jmp    13c6 <ccverf+0x2a6>
movl   $0x1,-0x74(%rbp)
cmpl   $0x10,-0x68(%rbp)
jne    1315 <ccverf+0x1f5>
cmpl   $0x1,-0x14(%rbp)
je     12ae <ccverf+0x18e>
cmpl   $0x2,-0x14(%rbp)
je     12ae <ccverf+0x18e>
cmpl   $0x4,-0x14(%rbp)
je     12ae <ccverf+0x18e>
movl   $0x0,-0x4(%rbp)
jmp    13c6 <ccverf+0x2a6>
cmpl   $0x1,-0x14(%rbp)
jne    12ce <ccverf+0x1ae>
cmpl   $0x4,-0x60(%rbp)
je     12ce <ccverf+0x1ae>
movl   $0x0,-0x4(%rbp)
jmp    13c6 <ccverf+0x2a6>
cmpl   $0x2,-0x14(%rbp)
jne    12ee <ccverf+0x1ce>
cmpl   $0x5,-0x60(%rbp)
je     12ee <ccverf+0x1ce>
movl   $0x0,-0x4(%rbp)
jmp    13c6 <ccverf+0x2a6>
cmpl   $0x4,-0x14(%rbp)
jne    130e <ccverf+0x1ee>
cmpl   $0x6,-0x60(%rbp)
je     130e <ccverf+0x1ee>
movl   $0x0,-0x4(%rbp)
jmp    13c6 <ccverf+0x2a6>
movl   $0x0,-0x74(%rbp)
mov    -0x74(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
cmp    -0x68(%rbp),%eax
jge    1370 <ccverf+0x250>
movslq -0x6c(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%eax
shl    $0x1,%eax
mov    %eax,-0x78(%rbp)
cmpl   $0xa,-0x78(%rbp)
jl     1352 <ccverf+0x232>
mov    -0x78(%rbp),%ecx
sub    $0x9,%ecx
movslq -0x6c(%rbp),%rax
mov    %ecx,-0x60(%rbp,%rax,4)
jmp    135d <ccverf+0x23d>
mov    -0x78(%rbp),%ecx
movslq -0x6c(%rbp),%rax
mov    %ecx,-0x60(%rbp,%rax,4)
jmp    1362 <ccverf+0x242>
mov    -0x6c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x6c(%rbp)
jmp    131b <ccverf+0x1fb>
movl   $0x0,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
cmp    -0x68(%rbp),%eax
jge    139f <ccverf+0x27f>
movslq -0x6c(%rbp),%rax
mov    -0x60(%rbp,%rax,4),%eax
add    -0x64(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    1377 <ccverf+0x257>
mov    -0x64(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     13bf <ccverf+0x29f>
movl   $0x0,-0x4(%rbp)
jmp    13c6 <ccverf+0x2a6>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ccverf>:
push   %rbp
push   %rbx
sub    $0x48,%rsp
mov    %esi,%ebp
mov    %rdi,%rbx
call   1030 <strlen@plt>
mov    %rax,%rcx
xor    %eax,%eax
test   $0x80000000,%ecx
jne    13f5 <ccverf+0x2e5>
add    $0x1,%ecx
xor    %eax,%eax
xor    %edx,%edx
jmp    1152 <ccverf+0x42>
nopw   0x0(%rax,%rax,1)
movslq %edx,%rdi
mov    %esi,(%rsp,%rdi,4)
add    $0x1,%edx
add    $0x1,%rax
cmp    %rax,%rcx
je     116a <ccverf+0x5a>
movsbl (%rbx,%rax,1),%esi
add    $0xffffffd0,%esi
cmp    $0x9,%esi
ja     1149 <ccverf+0x39>
cmp    $0x11,%edx
jne    1140 <ccverf+0x30>
xor    %eax,%eax
jmp    13f5 <ccverf+0x2e5>
xor    %eax,%eax
cmp    $0x10,%edx
je     1198 <ccverf+0x88>
cmp    $0xf,%edx
je     11e5 <ccverf+0xd5>
cmp    $0xd,%edx
jne    13f5 <ccverf+0x2e5>
cmp    $0x1,%ebp
jne    13f5 <ccverf+0x2e5>
mov    $0x1,%ecx
cmpl   $0x4,(%rsp)
je     11fd <ccverf+0xed>
jmp    13f5 <ccverf+0x2e5>
cmp    $0x4,%ebp
ja     13f5 <ccverf+0x2e5>
mov    $0x16,%ecx
bt     %ebp,%ecx
jae    13f5 <ccverf+0x2e5>
mov    (%rsp),%esi
cmp    $0x1,%ebp
jne    11c0 <ccverf+0xb0>
cmp    $0x4,%esi
jne    13f5 <ccverf+0x2e5>
cmp    $0x2,%ebp
jne    11ce <ccverf+0xbe>
cmp    $0x5,%esi
jne    13f5 <ccverf+0x2e5>
xor    %ecx,%ecx
cmp    $0x4,%ebp
jne    11fd <ccverf+0xed>
mov    $0x0,%eax
cmp    $0x6,%esi
jne    13f5 <ccverf+0x2e5>
jmp    11fd <ccverf+0xed>
cmp    $0x3,%ebp
jne    13f5 <ccverf+0x2e5>
mov    $0x1,%ecx
cmpl   $0x3,(%rsp)
jne    13f5 <ccverf+0x2e5>
mov    %edx,%r9d
cmp    %edx,%ecx
jae    12f4 <ccverf+0x1e4>
mov    %ecx,%ecx
mov    %rcx,%r10
not    %r10
add    %r9,%r10
cmp    $0x7,%r10
jbe    12d0 <ccverf+0x1c0>
shr    %r10
add    $0x1,%r10
mov    %r10d,%edi
and    $0x3,%edi
test   %rdi,%rdi
mov    $0x4,%ebp
cmovne %rdi,%rbp
sub    %rbp,%r10
lea    (%rcx,%r10,2),%r8
xor    %ebx,%ebx
movdqa 0xdb9(%rip),%xmm0
movdqa 0xdc1(%rip),%xmm1
nop
mov    %rbx,%rbp
or     %rcx,%rbp
lea    0x0(,%rbp,4),%rdi
mov    %rdi,%rax
or     $0x8,%rax
mov    %rdi,%rsi
or     $0x10,%rsi
or     $0x18,%rdi
movups (%rsp,%rbp,4),%xmm2
movups 0x10(%rsp,%rbp,4),%xmm3
shufps $0x88,%xmm3,%xmm2
movaps %xmm2,%xmm3
paddd  %xmm2,%xmm3
pcmpgtd %xmm0,%xmm2
movdqa %xmm2,%xmm4
pandn  %xmm3,%xmm4
paddd  %xmm1,%xmm3
pand   %xmm2,%xmm3
por    %xmm4,%xmm3
movd   %xmm3,(%rsp,%rbp,4)
pshufd $0x55,%xmm3,%xmm2
movd   %xmm2,(%rsp,%rax,1)
pshufd $0xee,%xmm3,%xmm2
movd   %xmm2,(%rsp,%rsi,1)
pshufd $0xff,%xmm3,%xmm2
movd   %xmm2,(%rsp,%rdi,1)
add    $0x8,%rbx
add    $0xfffffffffffffffc,%r10
jne    1250 <ccverf+0x140>
mov    %r8,%rcx
nopl   0x0(%rax)
mov    (%rsp,%rcx,4),%eax
lea    (%rax,%rax,1),%esi
cmp    $0x5,%eax
lea    -0x9(%rax,%rax,1),%eax
cmovl  %esi,%eax
mov    %eax,(%rsp,%rcx,4)
add    $0x2,%rcx
cmp    %r9,%rcx
jb     12d0 <ccverf+0x1c0>
test   %edx,%edx
jle    13fc <ccverf+0x2ec>
cmp    $0x8,%edx
jae    1302 <ccverf+0x1f2>
xor    %ecx,%ecx
xor    %edx,%edx
jmp    13d0 <ccverf+0x2c0>
mov    %r9d,%ecx
and    $0xfffffff8,%ecx
lea    -0x8(%rcx),%rax
mov    %rax,%rdi
shr    $0x3,%rdi
add    $0x1,%rdi
mov    %edi,%edx
and    $0x3,%edx
cmp    $0x18,%rax
jae    132e <ccverf+0x21e>
pxor   %xmm0,%xmm0
xor    %esi,%esi
pxor   %xmm1,%xmm1
jmp    1379 <ccverf+0x269>
and    $0xfffffffffffffffc,%rdi
pxor   %xmm0,%xmm0
xor    %esi,%esi
pxor   %xmm1,%xmm1
nopl   0x0(%rax)
paddd  (%rsp,%rsi,4),%xmm0
paddd  0x10(%rsp,%rsi,4),%xmm1
paddd  0x20(%rsp,%rsi,4),%xmm0
paddd  0x30(%rsp,%rsi,4),%xmm1
paddd  0x40(%rsp,%rsi,4),%xmm0
paddd  0x50(%rsp,%rsi,4),%xmm1
paddd  0x60(%rsp,%rsi,4),%xmm0
paddd  0x70(%rsp,%rsi,4),%xmm1
add    $0x20,%rsi
add    $0xfffffffffffffffc,%rdi
jne    1340 <ccverf+0x230>
test   %rdx,%rdx
je     13a4 <ccverf+0x294>
lea    (%rsp,%rsi,4),%rsi
add    $0x10,%rsi
shl    $0x5,%rdx
xor    %edi,%edi
nopl   0x0(%rax)
paddd  -0x10(%rsi,%rdi,1),%xmm0
paddd  (%rsi,%rdi,1),%xmm1
add    $0x20,%rdi
cmp    %rdi,%rdx
jne    1390 <ccverf+0x280>
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%edx
cmp    %r9,%rcx
je     13dc <ccverf+0x2cc>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    (%rsp,%rcx,4),%edx
add    $0x1,%rcx
cmp    %rcx,%r9
jne    13d0 <ccverf+0x2c0>
imul   $0xcccccccd,%edx,%ecx
add    $0x19999998,%ecx
ror    %ecx
xor    %eax,%eax
cmp    $0x19999999,%ecx
setb   %al
add    $0x48,%rsp
pop    %rbx
pop    %rbp
ret
mov    $0x1,%eax
jmp    13f5 <ccverf+0x2e5>

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

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