int valueitem(int n) {
  if (n > 51)
    return 2;
  if (n % 13 == 0)
    return 12;
  if (n % 13 == 10)
    return 8;
  if (n % 13 == 11)
    return 9;
  if (n % 13 == 12)
    return 10;
  if ((n > 25) && (n < 39))
    return 2 * (n % 13 + 1);
  return n % 13 + 1;
}


x86 assembly (clang, -O0):
<valueitem>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
cmpl   $0x33,-0x8(%rbp)
jle    111d <valueitem+0x1d>
movl   $0x2,-0x4(%rbp)
jmp    11dd <valueitem+0xdd>
mov    -0x8(%rbp),%eax
mov    $0xd,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    113d <valueitem+0x3d>
movl   $0xc,-0x4(%rbp)
jmp    11dd <valueitem+0xdd>
mov    -0x8(%rbp),%eax
mov    $0xd,%ecx
cltd
idiv   %ecx
cmp    $0xa,%edx
jne    115d <valueitem+0x5d>
movl   $0x8,-0x4(%rbp)
jmp    11dd <valueitem+0xdd>
mov    -0x8(%rbp),%eax
mov    $0xd,%ecx
cltd
idiv   %ecx
cmp    $0xb,%edx
jne    117d <valueitem+0x7d>
movl   $0x9,-0x4(%rbp)
jmp    11dd <valueitem+0xdd>
mov    -0x8(%rbp),%eax
mov    $0xd,%ecx
cltd
idiv   %ecx
cmp    $0xc,%edx
jne    119d <valueitem+0x9d>
movl   $0xa,-0x4(%rbp)
jmp    11dd <valueitem+0xdd>
cmpl   $0x19,-0x8(%rbp)
jle    11cc <valueitem+0xcc>
cmpl   $0x27,-0x8(%rbp)
jge    11cc <valueitem+0xcc>
mov    -0x8(%rbp),%eax
mov    $0xd,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
add    $0x1,%eax
shl    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    11dd <valueitem+0xdd>
mov    -0x8(%rbp),%eax
mov    $0xd,%ecx
cltd
idiv   %ecx
add    $0x1,%edx
mov    %edx,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<valueitem>:
mov    $0x2,%eax
cmp    $0x33,%edi
jle    110b <valueitem+0xb>
ret
movslq %edi,%rax
imul   $0x4ec4ec4f,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x22,%rax
add    %ecx,%eax
lea    (%rax,%rax,2),%ecx
lea    (%rax,%rcx,4),%eax
mov    %edi,%ecx
sub    %eax,%ecx
cmp    $0xc,%ecx
ja     114c <valueitem+0x4c>
mov    $0xc,%eax
lea    0xec3(%rip),%rdx
movslq (%rdx,%rcx,4),%rsi
add    %rdx,%rsi
jmp    *%rsi
mov    $0x8,%eax
ret
add    $0xffffffe6,%edi
cmp    $0xc,%edi
ja     1167 <valueitem+0x67>
lea    (%rcx,%rcx,1),%eax
add    $0x2,%eax
ret
mov    $0x9,%eax
ret
mov    $0xa,%eax
ret
add    $0x1,%ecx
mov    %ecx,%eax
ret

LLVM IR (-O0):
define i32 @valueitem(i32 %0) {
%2 = alloca i32
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
%5 = icmp sgt i32 %4, 51
br i1 %5, label %6, label %7
6: ; preds = %1
store i32 2, i32* %2
br label %42
7: ; preds = %1
%8 = load i32, i32* %3
%9 = srem i32 %8, 13
%10 = icmp eq i32 %9, 0
br i1 %10, label %11, label %12
11: ; preds = %7
store i32 12, i32* %2
br label %42
12: ; preds = %7
%13 = load i32, i32* %3
%14 = srem i32 %13, 13
%15 = icmp eq i32 %14, 10
br i1 %15, label %16, label %17
16: ; preds = %12
store i32 8, i32* %2
br label %42
17: ; preds = %12
%18 = load i32, i32* %3
%19 = srem i32 %18, 13
%20 = icmp eq i32 %19, 11
br i1 %20, label %21, label %22
21: ; preds = %17
store i32 9, i32* %2
br label %42
22: ; preds = %17
%23 = load i32, i32* %3
%24 = srem i32 %23, 13
%25 = icmp eq i32 %24, 12
br i1 %25, label %26, label %27
26: ; preds = %22
store i32 10, i32* %2
br label %42
27: ; preds = %22
%28 = load i32, i32* %3
%29 = icmp sgt i32 %28, 25
br i1 %29, label %30, label %38
30: ; preds = %27
%31 = load i32, i32* %3
%32 = icmp slt i32 %31, 39
br i1 %32, label %33, label %38
33: ; preds = %30
%34 = load i32, i32* %3
%35 = srem i32 %34, 13
%36 = add nsw i32 %35, 1
%37 = mul nsw i32 2, %36
store i32 %37, i32* %2
br label %42
38: ; preds = %30, %27
%39 = load i32, i32* %3
%40 = srem i32 %39, 13
%41 = add nsw i32 %40, 1
store i32 %41, i32* %2
br label %42
42: ; preds = %38, %33, %26, %21, %16, %11, %6
%43 = load i32, i32* %2
ret i32 %43
}

LLVM IR (-O2):
define i32 @valueitem(i32 %0) {
%2 = icmp sgt i32 %0, 51
br i1 %2, label %16, label %3
3: ; preds = %1
%4 = srem i32 %0, 13
switch i32 %4, label %8 [
i32 0, label %16
i32 10, label %5
i32 11, label %6
i32 12, label %7
]
5: ; preds = %3
br label %16
6: ; preds = %3
br label %16
7: ; preds = %3
br label %16
8: ; preds = %3
%9 = add i32 %0, -26
%10 = icmp ult i32 %9, 13
br i1 %10, label %11, label %14
11: ; preds = %8
%12 = shl nsw i32 %4, 1
%13 = add nsw i32 %12, 2
br label %16
14: ; preds = %8
%15 = add nsw i32 %4, 1
br label %16
16: ; preds = %3, %1, %14, %11, %7, %6, %5
%17 = phi i32 [ 8, %5 ], [ 9, %6 ], [ 10, %7 ], [ %13, %11 ], [ %15, %14 ], [ 2, %1 ], [ 12, %3 ]
ret i32 %17
}