int pocetSegmentu(int c, int nuly) {
  int segmenty[] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
  int pocet = 0;
  if (nuly == 1 || c > 9) {
    pocet = segmenty[c / 10];
    pocet += segmenty[c % 10];
  } else
    pocet = segmenty[c];
  return pocet;
}


x86 assembly (clang, -O0):
<pocetSegmentu>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
lea    -0x30(%rbp),%rdi
lea    0xed7(%rip),%rsi
mov    $0x28,%edx
call   1030 <memcpy@plt>
movl   $0x0,-0x34(%rbp)
cmpl   $0x1,-0x8(%rbp)
je     114e <pocetSegmentu+0x3e>
cmpl   $0x9,-0x4(%rbp)
jle    117f <pocetSegmentu+0x6f>
mov    -0x4(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
cltq
mov    -0x30(%rbp,%rax,4),%eax
mov    %eax,-0x34(%rbp)
mov    -0x4(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
movslq %edx,%rax
mov    -0x30(%rbp,%rax,4),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
jmp    118a <pocetSegmentu+0x7a>
movslq -0x4(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<pocetSegmentu>:
cmp    $0x9,%edi
jg     1118 <pocetSegmentu+0x18>
cmp    $0x1,%esi
je     1118 <pocetSegmentu+0x18>
movslq %edi,%rax
lea    0xeec(%rip),%rcx
mov    (%rcx,%rax,4),%eax
ret
movslq %edi,%rax
imul   $0x66666667,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rax
add    %ecx,%eax
movslq %eax,%rcx
lea    0xec7(%rip),%rdx
lea    (%rcx,%rcx,1),%eax
lea    (%rax,%rax,4),%eax
sub    %eax,%edi
movslq %edi,%rax
mov    (%rdx,%rax,4),%eax
add    (%rdx,%rcx,4),%eax
ret

LLVM IR (-O0):
@__const.pocetSegmentu.segmenty = [10 x i32] [i32 6, i32 2, i32 5, i32 5, i32 4, i32 5, i32 6, i32 3, i32 7, i32 6]
define i32 @pocetSegmentu(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca [10 x i32]
%6 = alloca i32
store i32 %0, i32* %3
store i32 %1, i32* %4
%7 = bitcast [10 x i32]* %5 to i8*
store i32 0, i32* %6
%8 = load i32, i32* %4
%9 = icmp eq i32 %8, 1
br i1 %9, label %13, label %10
10: ; preds = %2
%11 = load i32, i32* %3
%12 = icmp sgt i32 %11, 9
br i1 %12, label %13, label %26
13: ; preds = %10, %2
%14 = load i32, i32* %3
%15 = sdiv i32 %14, 10
%16 = sext i32 %15 to i64
%17 = getelementptr inbounds [10 x i32], [10 x i32]* %5, i64 0, i64 %16
%18 = load i32, i32* %17
store i32 %18, i32* %6
%19 = load i32, i32* %3
%20 = srem i32 %19, 10
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds [10 x i32], [10 x i32]* %5, i64 0, i64 %21
%23 = load i32, i32* %22
%24 = load i32, i32* %6
%25 = add nsw i32 %24, %23
store i32 %25, i32* %6
br label %31
26: ; preds = %10
%27 = load i32, i32* %3
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds [10 x i32], [10 x i32]* %5, i64 0, i64 %28
%30 = load i32, i32* %29
store i32 %30, i32* %6
br label %31
31: ; preds = %26, %13
%32 = load i32, i32* %6
ret i32 %32
}

LLVM IR (-O2):
@__const.pocetSegmentu.segmenty = [10 x i32] [i32 6, i32 2, i32 5, i32 5, i32 4, i32 5, i32 6, i32 3, i32 7, i32 6]
define i32 @pocetSegmentu(i32 %0, i32 %1) {
%3 = icmp eq i32 %1, 1
%4 = icmp sgt i32 %0, 9
%5 = or i1 %4, %3
br i1 %5, label %6, label %16
6: ; preds = %2
%7 = sdiv i32 %0, 10
%8 = sext i32 %7 to i64
%9 = getelementptr inbounds [10 x i32], [10 x i32]* @__const.pocetSegmentu.segmenty, i64 0, i64 %8
%10 = load i32, i32* %9
%11 = srem i32 %0, 10
%12 = sext i32 %11 to i64
%13 = getelementptr inbounds [10 x i32], [10 x i32]* @__const.pocetSegmentu.segmenty, i64 0, i64 %12
%14 = load i32, i32* %13
%15 = add nsw i32 %14, %10
br label %20
16: ; preds = %2
%17 = sext i32 %0 to i64
%18 = getelementptr inbounds [10 x i32], [10 x i32]* @__const.pocetSegmentu.segmenty, i64 0, i64 %17
%19 = load i32, i32* %18
br label %20
20: ; preds = %16, %6
%21 = phi i32 [ %15, %6 ], [ %19, %16 ]
ret i32 %21
}