#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*/ reset(int *);
int ispan(int a, int b, int c) {
  int i;
  int pan[10];
  reset(pan);
  while (a != 0) {
    if (pan[a % 10])
      return 0;
    pan[a % 10] = 1;
    a /= 10;
  }
  while (b != 0) {
    if (pan[b % 10])
      return 0;
    pan[b % 10] = 1;
    b /= 10;
  }
  while (c != 0) {
    if (pan[c % 10])
      return 0;
    pan[c % 10] = 1;
    c /= 10;
  }
  for (i = 0; i < 11; i++)
    if (!pan[i])
      return 0;
  return 1;
}


x86 assembly (clang, -O0):
<ispan>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
lea    -0x40(%rbp),%rdi
call   1030 <reset@plt>
cmpl   $0x0,-0x8(%rbp)
je     1182 <ispan+0x72>
mov    -0x8(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
movslq %edx,%rax
cmpl   $0x0,-0x40(%rbp,%rax,4)
je     1159 <ispan+0x49>
movl   $0x0,-0x4(%rbp)
jmp    1282 <ispan+0x172>
mov    -0x8(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
movslq %edx,%rax
movl   $0x1,-0x40(%rbp,%rax,4)
mov    -0x8(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x8(%rbp)
jmp    112a <ispan+0x1a>
jmp    1187 <ispan+0x77>
cmpl   $0x0,-0xc(%rbp)
je     11df <ispan+0xcf>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
movslq %edx,%rax
cmpl   $0x0,-0x40(%rbp,%rax,4)
je     11b6 <ispan+0xa6>
movl   $0x0,-0x4(%rbp)
jmp    1282 <ispan+0x172>
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
movslq %edx,%rax
movl   $0x1,-0x40(%rbp,%rax,4)
mov    -0xc(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0xc(%rbp)
jmp    1187 <ispan+0x77>
jmp    11e4 <ispan+0xd4>
cmpl   $0x0,-0x10(%rbp)
je     123c <ispan+0x12c>
mov    -0x10(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
movslq %edx,%rax
cmpl   $0x0,-0x40(%rbp,%rax,4)
je     1213 <ispan+0x103>
movl   $0x0,-0x4(%rbp)
jmp    1282 <ispan+0x172>
mov    -0x10(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
movslq %edx,%rax
movl   $0x1,-0x40(%rbp,%rax,4)
mov    -0x10(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x10(%rbp)
jmp    11e4 <ispan+0xd4>
movl   $0x0,-0x14(%rbp)
cmpl   $0xb,-0x14(%rbp)
jge    127b <ispan+0x16b>
movslq -0x14(%rbp),%rax
cmpl   $0x0,-0x40(%rbp,%rax,4)
jne    1268 <ispan+0x158>
movl   $0x0,-0x4(%rbp)
jmp    1282 <ispan+0x172>
jmp    126d <ispan+0x15d>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1243 <ispan+0x133>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ispan>:
push   %rbp
push   %r14
push   %rbx
sub    $0x30,%rsp
mov    %edx,%r14d
mov    %esi,%ebp
mov    %edi,%ebx
mov    %rsp,%rdi
call   1030 <reset@plt>
test   %ebx,%ebx
je     116d <ispan+0x5d>
nopl   0x0(%rax,%rax,1)
movslq %ebx,%rcx
imul   $0x66666667,%rcx,%rax
mov    %rax,%rdx
shr    $0x3f,%rdx
sar    $0x22,%rax
add    %edx,%eax
lea    (%rax,%rax,1),%edx
lea    (%rdx,%rdx,4),%edx
sub    %edx,%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rsp,%rcx,4)
jne    1247 <ispan+0x137>
movl   $0x1,(%rsp,%rcx,4)
add    $0x9,%ebx
cmp    $0x13,%ebx
mov    %eax,%ebx
jae    1130 <ispan+0x20>
test   %ebp,%ebp
je     11bd <ispan+0xad>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movslq %ebp,%rcx
imul   $0x66666667,%rcx,%rax
mov    %rax,%rdx
shr    $0x3f,%rdx
sar    $0x22,%rax
add    %edx,%eax
lea    (%rax,%rax,1),%edx
lea    (%rdx,%rdx,4),%edx
sub    %edx,%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rsp,%rcx,4)
jne    1247 <ispan+0x137>
movl   $0x1,(%rsp,%rcx,4)
add    $0x9,%ebp
cmp    $0x13,%ebp
mov    %eax,%ebp
jae    1180 <ispan+0x70>
test   %r14d,%r14d
je     120c <ispan+0xfc>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movslq %r14d,%rcx
imul   $0x66666667,%rcx,%rax
mov    %rax,%rdx
shr    $0x3f,%rdx
sar    $0x22,%rax
add    %edx,%eax
lea    (%rax,%rax,1),%edx
lea    (%rdx,%rdx,4),%edx
sub    %edx,%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rsp,%rcx,4)
jne    1247 <ispan+0x137>
movl   $0x1,(%rsp,%rcx,4)
add    $0x9,%r14d
cmp    $0x13,%r14d
mov    %eax,%r14d
jae    11d0 <ispan+0xc0>
pxor   %xmm0,%xmm0
movdqa 0x10(%rsp),%xmm1
pcmpeqd %xmm0,%xmm1
pcmpeqd (%rsp),%xmm0
packssdw %xmm1,%xmm0
pmovmskb %xmm0,%ecx
xor    %eax,%eax
test   %ecx,%ecx
jne    1249 <ispan+0x139>
cmpl   $0x0,0x20(%rsp)
je     1249 <ispan+0x139>
cmpl   $0x0,0x24(%rsp)
je     1249 <ispan+0x139>
xor    %eax,%eax
cmpl   $0x0,0x28(%rsp)
setne  %al
jmp    1249 <ispan+0x139>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbx
pop    %r14
pop    %rbp
ret

LLVM IR (-O0):
define i32 @ispan(i32 %0, i32 %1, i32 %2) {
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca [10 x i32]
store i32 %0, i32* %5
store i32 %1, i32* %6
store i32 %2, i32* %7
%10 = getelementptr inbounds [10 x i32], [10 x i32]* %9, i64 0, i64 0
%11 = call i32 @reset(i32* %10)
br label %12
12: ; preds = %23, %3
%13 = load i32, i32* %5
%14 = icmp ne i32 %13, 0
br i1 %14, label %15, label %30
15: ; preds = %12
%16 = load i32, i32* %5
%17 = srem i32 %16, 10
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds [10 x i32], [10 x i32]* %9, i64 0, i64 %18
%20 = load i32, i32* %19
%21 = icmp ne i32 %20, 0
br i1 %21, label %22, label %23
22: ; preds = %15
store i32 0, i32* %4
br label %84
23: ; preds = %15
%24 = load i32, i32* %5
%25 = srem i32 %24, 10
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds [10 x i32], [10 x i32]* %9, i64 0, i64 %26
store i32 1, i32* %27
%28 = load i32, i32* %5
%29 = sdiv i32 %28, 10
store i32 %29, i32* %5
br label %12
30: ; preds = %12
br label %31
31: ; preds = %42, %30
%32 = load i32, i32* %6
%33 = icmp ne i32 %32, 0
br i1 %33, label %34, label %49
34: ; preds = %31
%35 = load i32, i32* %6
%36 = srem i32 %35, 10
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds [10 x i32], [10 x i32]* %9, i64 0, i64 %37
%39 = load i32, i32* %38
%40 = icmp ne i32 %39, 0
br i1 %40, label %41, label %42
41: ; preds = %34
store i32 0, i32* %4
br label %84
42: ; preds = %34
%43 = load i32, i32* %6
%44 = srem i32 %43, 10
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds [10 x i32], [10 x i32]* %9, i64 0, i64 %45
store i32 1, i32* %46
%47 = load i32, i32* %6
%48 = sdiv i32 %47, 10
store i32 %48, i32* %6
br label %31
49: ; preds = %31
br label %50
50: ; preds = %61, %49
%51 = load i32, i32* %7
%52 = icmp ne i32 %51, 0
br i1 %52, label %53, label %68
53: ; preds = %50
%54 = load i32, i32* %7
%55 = srem i32 %54, 10
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds [10 x i32], [10 x i32]* %9, i64 0, i64 %56
%58 = load i32, i32* %57
%59 = icmp ne i32 %58, 0
br i1 %59, label %60, label %61
60: ; preds = %53
store i32 0, i32* %4
br label %84
61: ; preds = %53
%62 = load i32, i32* %7
%63 = srem i32 %62, 10
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds [10 x i32], [10 x i32]* %9, i64 0, i64 %64
store i32 1, i32* %65
%66 = load i32, i32* %7
%67 = sdiv i32 %66, 10
store i32 %67, i32* %7
br label %50
68: ; preds = %50
store i32 0, i32* %8
br label %69
69: ; preds = %80, %68
%70 = load i32, i32* %8
%71 = icmp slt i32 %70, 11
br i1 %71, label %72, label %83
72: ; preds = %69
%73 = load i32, i32* %8
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds [10 x i32], [10 x i32]* %9, i64 0, i64 %74
%76 = load i32, i32* %75
%77 = icmp ne i32 %76, 0
br i1 %77, label %79, label %78
78: ; preds = %72
store i32 0, i32* %4
br label %84
79: ; preds = %72
br label %80
80: ; preds = %79
%81 = load i32, i32* %8
%82 = add nsw i32 %81, 1
store i32 %82, i32* %8
br label %69
83: ; preds = %69
store i32 1, i32* %4
br label %84
84: ; preds = %83, %78, %60, %41, %22
%85 = load i32, i32* %4
ret i32 %85
}

LLVM IR (-O2):
define i32 @ispan(i32 %0, i32 %1, i32 %2) {
%4 = alloca [10 x i32]
%5 = bitcast [10 x i32]* %4 to i8*
%6 = getelementptr inbounds [10 x i32], [10 x i32]* %4, i64 0, i64 0
%7 = call i32 @reset(i32* %6)
%8 = icmp eq i32 %0, 0
br i1 %8, label %9, label %11
9: ; preds = %19, %3
%10 = icmp eq i32 %1, 0
br i1 %10, label %22, label %24
11: ; preds = %3, %19
%12 = phi i32 [ %14, %19 ], [ %0, %3 ]
%13 = srem i32 %12, 10
%14 = sdiv i32 %12, 10
%15 = sext i32 %13 to i64
%16 = getelementptr inbounds [10 x i32], [10 x i32]* %4, i64 0, i64 %15
%17 = load i32, i32* %16
%18 = icmp eq i32 %17, 0
br i1 %18, label %19, label %66
19: ; preds = %11
store i32 1, i32* %16
%20 = add i32 %12, 9
%21 = icmp ult i32 %20, 19
br i1 %21, label %9, label %11
22: ; preds = %32, %9
%23 = icmp eq i32 %2, 0
br i1 %23, label %35, label %50
24: ; preds = %9, %32
%25 = phi i32 [ %27, %32 ], [ %1, %9 ]
%26 = srem i32 %25, 10
%27 = sdiv i32 %25, 10
%28 = sext i32 %26 to i64
%29 = getelementptr inbounds [10 x i32], [10 x i32]* %4, i64 0, i64 %28
%30 = load i32, i32* %29
%31 = icmp eq i32 %30, 0
br i1 %31, label %32, label %66
32: ; preds = %24
store i32 1, i32* %29
%33 = add i32 %25, 9
%34 = icmp ult i32 %33, 19
br i1 %34, label %22, label %24
35: ; preds = %58, %22
%36 = bitcast [10 x i32]* %4 to <8 x i32>*
%37 = load <8 x i32>, <8 x i32>* %36
%38 = freeze <8 x i32> %37
%39 = icmp eq <8 x i32> %38, zeroinitializer
%40 = bitcast <8 x i1> %39 to i8
%41 = icmp ne i8 %40, 0
%42 = getelementptr inbounds [10 x i32], [10 x i32]* %4, i64 0, i64 8
%43 = load i32, i32* %42
%44 = icmp eq i32 %43, 0
%45 = select i1 %41, i1 true, i1 %44
%46 = getelementptr inbounds [10 x i32], [10 x i32]* %4, i64 0, i64 9
%47 = load i32, i32* %46
%48 = icmp eq i32 %47, 0
%49 = select i1 %45, i1 true, i1 %48
br i1 %49, label %66, label %61
50: ; preds = %22, %58
%51 = phi i32 [ %53, %58 ], [ %2, %22 ]
%52 = srem i32 %51, 10
%53 = sdiv i32 %51, 10
%54 = sext i32 %52 to i64
%55 = getelementptr inbounds [10 x i32], [10 x i32]* %4, i64 0, i64 %54
%56 = load i32, i32* %55
%57 = icmp eq i32 %56, 0
br i1 %57, label %58, label %66
58: ; preds = %50
store i32 1, i32* %55
%59 = add i32 %51, 9
%60 = icmp ult i32 %59, 19
br i1 %60, label %35, label %50
61: ; preds = %35
%62 = getelementptr inbounds [10 x i32], [10 x i32]* %4, i64 0, i64 10
%63 = load i32, i32* %62
%64 = icmp ne i32 %63, 0
%65 = zext i1 %64 to i32
br label %66
66: ; preds = %11, %24, %50, %61, %35
%67 = phi i32 [ 0, %35 ], [ %65, %61 ], [ 0, %50 ], [ 0, %24 ], [ 0, %11 ]
ret i32 %67
}