unsigned int count_sum(unsigned int degree) {
  unsigned int count, a1, a2, a3;
  count = 0;
  for (a1 = 0; (9 * a1 <= degree); a1++) {
    for (a2 = 0; (9 * a1 + 13 * a2 <= degree); a2++) {
      for (a3 = 0; (9 * a1 + 13 * a2 + 16 * a3 <= degree); a3++) {
        if ((degree - (a1 * 9 + a2 * 13 + a3 * 16)) % 17 == 0) {
          count++;
        }
      }
    }
  }
  return (count);
}


x86 assembly (clang, -O0):
<count_sum>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
imul   $0x9,-0xc(%rbp),%eax
cmp    -0x4(%rbp),%eax
ja     11c9 <count_sum+0xc9>
movl   $0x0,-0x10(%rbp)
imul   $0x9,-0xc(%rbp),%eax
imul   $0xd,-0x10(%rbp),%ecx
add    %ecx,%eax
cmp    -0x4(%rbp),%eax
ja     11b6 <count_sum+0xb6>
movl   $0x0,-0x14(%rbp)
imul   $0x9,-0xc(%rbp),%eax
imul   $0xd,-0x10(%rbp),%ecx
add    %ecx,%eax
mov    -0x14(%rbp),%ecx
shl    $0x4,%ecx
add    %ecx,%eax
cmp    -0x4(%rbp),%eax
ja     11a3 <count_sum+0xa3>
mov    -0x4(%rbp),%eax
imul   $0x9,-0xc(%rbp),%ecx
imul   $0xd,-0x10(%rbp),%edx
add    %edx,%ecx
mov    -0x14(%rbp),%edx
shl    $0x4,%edx
add    %edx,%ecx
sub    %ecx,%eax
mov    $0x11,%ecx
xor    %edx,%edx
div    %ecx
cmp    $0x0,%edx
jne    1190 <count_sum+0x90>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1195 <count_sum+0x95>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1143 <count_sum+0x43>
jmp    11a8 <count_sum+0xa8>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1129 <count_sum+0x29>
jmp    11bb <count_sum+0xbb>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1115 <count_sum+0x15>
mov    -0x8(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<count_sum>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
lea    0x1(%rdi),%r8d
movd   %edi,%xmm0
pshufd $0x0,%xmm0,%xmm11
mov    $0x10,%r10d
mov    $0xffffffff,%r13d
xor    %r11d,%r11d
movdqa 0xed0(%rip),%xmm8
movdqa 0xed7(%rip),%xmm9
movdqa 0xedf(%rip),%xmm3
movdqa 0xee6(%rip),%xmm12
movdqa 0xeed(%rip),%xmm13
pcmpeqd %xmm6,%xmm6
movdqa 0xef0(%rip),%xmm10
xor    %ecx,%ecx
xor    %eax,%eax
jmp    1197 <count_sum+0x97>
cs nopw 0x0(%rax,%rax,1)
mov    -0x8(%rsp),%rcx
add    $0x1,%ecx
add    $0x9,%r11d
mov    -0xc(%rsp),%r10d
add    $0x9,%r10d
mov    -0x10(%rsp),%r13d
add    $0xfffffff7,%r13d
cmp    %edi,%r11d
ja     132b <count_sum+0x22b>
lea    0x10(%r11),%r14d
mov    %rcx,-0x8(%rsp)
lea    (%rcx,%rcx,8),%r15d
not    %r15d
mov    %r11d,%ebx
mov    %r13d,-0x10(%rsp)
mov    %r10d,-0xc(%rsp)
xor    %edx,%edx
jmp    11d2 <count_sum+0xd2>
nopl   0x0(%rax,%rax,1)
add    $0x1,%edx
add    $0xd,%ebx
add    $0xd,%r10d
add    $0xfffffff3,%r13d
cmp    %edi,%ebx
ja     1170 <count_sum+0x70>
cmp    %r8d,%r10d
mov    %r8d,%r12d
cmova  %r10d,%r12d
lea    (%rdx,%rdx,2),%ecx
lea    (%rdx,%rcx,4),%ecx
add    %r14d,%ecx
cmp    %r8d,%ecx
cmovbe %r8d,%ecx
imul   $0xfffffff3,%edx,%ebp
add    %r15d,%ebp
add    %ecx,%ebp
xor    %r9d,%r9d
cmp    $0x70,%ebp
jae    1210 <count_sum+0x110>
mov    %ebx,%ecx
jmp    12ea <count_sum+0x1ea>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    %r13d,%r12d
shr    $0x4,%r12d
add    $0x1,%r12d
and    $0xfffffff8,%r12d
shr    $0x4,%ebp
add    $0x1,%ebp
mov    %ebp,%r9d
and    $0xfffffff8,%r9d
mov    %r9d,%ecx
shl    $0x4,%ecx
add    %ebx,%ecx
movd   %ebx,%xmm1
pshufd $0x0,%xmm1,%xmm2
paddd  %xmm8,%xmm2
movd   %eax,%xmm7
pxor   %xmm1,%xmm1
nopw   0x0(%rax,%rax,1)
movdqa %xmm11,%xmm0
psubd  %xmm2,%xmm0
movdqa %xmm0,%xmm4
psubd  %xmm9,%xmm4
pshufd $0xf5,%xmm0,%xmm5
pmuludq %xmm3,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq %xmm3,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm0
pxor   %xmm12,%xmm0
pcmpgtd %xmm13,%xmm0
paddd  %xmm0,%xmm7
pshufd $0xf5,%xmm4,%xmm0
pmuludq %xmm3,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm3,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm4
pxor   %xmm12,%xmm4
pcmpgtd %xmm13,%xmm4
paddd  %xmm4,%xmm1
psubd  %xmm6,%xmm7
psubd  %xmm6,%xmm1
paddd  %xmm10,%xmm2
add    $0xfffffff8,%r12d
jne    1250 <count_sum+0x150>
paddd  %xmm7,%xmm1
pshufd $0xee,%xmm1,%xmm0
paddd  %xmm1,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%eax
cmp    %r9d,%ebp
je     11c0 <count_sum+0xc0>
mov    %r9d,%ebp
shl    $0x4,%ebp
add    %ebx,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %edi,%esi
sub    %ecx,%esi
imul   $0xf0f0f0f1,%esi,%ecx
cmp    $0xf0f0f10,%ecx
adc    $0x0,%eax
add    $0x1,%r9d
mov    %r9d,%ecx
shl    $0x4,%ecx
add    %ebx,%ecx
add    $0x10,%ebp
cmp    %edi,%ebp
jbe    1300 <count_sum+0x200>
jmp    11c0 <count_sum+0xc0>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @count_sum(i32 %0) {
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
store i32 %0, i32* %2
store i32 0, i32* %3
store i32 0, i32* %4
br label %7
7: ; preds = %58, %1
%8 = load i32, i32* %4
%9 = mul i32 9, %8
%10 = load i32, i32* %2
%11 = icmp ule i32 %9, %10
br i1 %11, label %12, label %61
12: ; preds = %7
store i32 0, i32* %5
br label %13
13: ; preds = %54, %12
%14 = load i32, i32* %4
%15 = mul i32 9, %14
%16 = load i32, i32* %5
%17 = mul i32 13, %16
%18 = add i32 %15, %17
%19 = load i32, i32* %2
%20 = icmp ule i32 %18, %19
br i1 %20, label %21, label %57
21: ; preds = %13
store i32 0, i32* %6
br label %22
22: ; preds = %50, %21
%23 = load i32, i32* %4
%24 = mul i32 9, %23
%25 = load i32, i32* %5
%26 = mul i32 13, %25
%27 = add i32 %24, %26
%28 = load i32, i32* %6
%29 = mul i32 16, %28
%30 = add i32 %27, %29
%31 = load i32, i32* %2
%32 = icmp ule i32 %30, %31
br i1 %32, label %33, label %53
33: ; preds = %22
%34 = load i32, i32* %2
%35 = load i32, i32* %4
%36 = mul i32 %35, 9
%37 = load i32, i32* %5
%38 = mul i32 %37, 13
%39 = add i32 %36, %38
%40 = load i32, i32* %6
%41 = mul i32 %40, 16
%42 = add i32 %39, %41
%43 = sub i32 %34, %42
%44 = urem i32 %43, 17
%45 = icmp eq i32 %44, 0
br i1 %45, label %46, label %49
46: ; preds = %33
%47 = load i32, i32* %3
%48 = add i32 %47, 1
store i32 %48, i32* %3
br label %49
49: ; preds = %46, %33
br label %50
50: ; preds = %49
%51 = load i32, i32* %6
%52 = add i32 %51, 1
store i32 %52, i32* %6
br label %22
53: ; preds = %22
br label %54
54: ; preds = %53
%55 = load i32, i32* %5
%56 = add i32 %55, 1
store i32 %56, i32* %5
br label %13
57: ; preds = %13
br label %58
58: ; preds = %57
%59 = load i32, i32* %4
%60 = add i32 %59, 1
store i32 %60, i32* %4
br label %7
61: ; preds = %7
%62 = load i32, i32* %3
ret i32 %62
}

LLVM IR (-O2):
define i32 @count_sum(i32 %0) {
%2 = add nuw i32 %0, 1
%3 = insertelement <4 x i32> poison, i32 %0, i64 0
%4 = shufflevector <4 x i32> %3, <4 x i32> poison, <4 x i32> zeroinitializer
%5 = insertelement <4 x i32> poison, i32 %0, i64 0
%6 = shufflevector <4 x i32> %5, <4 x i32> poison, <4 x i32> zeroinitializer
br label %7
7: ; preds = %81, %1
%8 = phi i32 [ 0, %1 ], [ %83, %81 ]
%9 = phi i32 [ 0, %1 ], [ %82, %81 ]
%10 = phi i32 [ 0, %1 ], [ %76, %81 ]
%11 = add i32 %8, 16
%12 = mul i32 %9, -9
%13 = add i32 %12, -1
br label %14
14: ; preds = %75, %7
%15 = phi i32 [ %79, %75 ], [ %8, %7 ]
%16 = phi i32 [ %77, %75 ], [ 0, %7 ]
%17 = phi i32 [ %76, %75 ], [ %10, %7 ]
%18 = mul i32 %16, 13
%19 = add i32 %11, %18
%20 = call i32 @llvm.umax.i32(i32 %19, i32 %2)
%21 = mul i32 %16, -13
%22 = add i32 %13, %21
%23 = add i32 %20, %22
%24 = lshr i32 %23, 4
%25 = add nuw nsw i32 %24, 1
%26 = icmp ult i32 %23, 112
br i1 %26, label %58, label %27
27: ; preds = %14
%28 = and i32 %25, 536870904
%29 = shl i32 %28, 4
%30 = add i32 %15, %29
%31 = insertelement <4 x i32> poison, i32 %15, i64 0
%32 = shufflevector <4 x i32> %31, <4 x i32> poison, <4 x i32> zeroinitializer
%33 = add <4 x i32> %32, <i32 0, i32 16, i32 32, i32 48>
%34 = insertelement <4 x i32> <i32 poison, i32 0, i32 0, i32 0>, i32 %17, i64 0
br label %35
35: ; preds = %35, %27
%36 = phi i32 [ 0, %27 ], [ %51, %35 ]
%37 = phi <4 x i32> [ %33, %27 ], [ %52, %35 ]
%38 = phi <4 x i32> [ %34, %27 ], [ %49, %35 ]
%39 = phi <4 x i32> [ zeroinitializer, %27 ], [ %50, %35 ]
%40 = add <4 x i32> %37, <i32 64, i32 64, i32 64, i32 64>
%41 = sub <4 x i32> %4, %37
%42 = sub <4 x i32> %6, %40
%43 = urem <4 x i32> %41, <i32 17, i32 17, i32 17, i32 17>
%44 = urem <4 x i32> %42, <i32 17, i32 17, i32 17, i32 17>
%45 = icmp eq <4 x i32> %43, zeroinitializer
%46 = icmp eq <4 x i32> %44, zeroinitializer
%47 = zext <4 x i1> %45 to <4 x i32>
%48 = zext <4 x i1> %46 to <4 x i32>
%49 = add <4 x i32> %38, %47
%50 = add <4 x i32> %39, %48
%51 = add nuw i32 %36, 8
%52 = add <4 x i32> %37, <i32 128, i32 128, i32 128, i32 128>
%53 = icmp eq i32 %51, %28
br i1 %53, label %54, label %35
54: ; preds = %35
%55 = add <4 x i32> %50, %49
%56 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %55)
%57 = icmp eq i32 %25, %28
br i1 %57, label %75, label %58
58: ; preds = %14, %54
%59 = phi i32 [ %15, %14 ], [ %30, %54 ]
%60 = phi i32 [ 0, %14 ], [ %28, %54 ]
%61 = phi i32 [ %17, %14 ], [ %56, %54 ]
br label %62
62: ; preds = %58, %62
%63 = phi i32 [ %73, %62 ], [ %59, %58 ]
%64 = phi i32 [ %71, %62 ], [ %60, %58 ]
%65 = phi i32 [ %70, %62 ], [ %61, %58 ]
%66 = sub i32 %0, %63
%67 = urem i32 %66, 17
%68 = icmp eq i32 %67, 0
%69 = zext i1 %68 to i32
%70 = add i32 %65, %69
%71 = add nuw nsw i32 %64, 1
%72 = shl i32 %71, 4
%73 = add i32 %72, %15
%74 = icmp ugt i32 %73, %0
br i1 %74, label %75, label %62
75: ; preds = %62, %54
%76 = phi i32 [ %56, %54 ], [ %70, %62 ]
%77 = add i32 %16, 1
%78 = mul i32 %77, 13
%79 = add i32 %78, %8
%80 = icmp ugt i32 %79, %0
br i1 %80, label %81, label %14
81: ; preds = %75
%82 = add i32 %9, 1
%83 = mul i32 %82, 9
%84 = icmp ugt i32 %83, %0
br i1 %84, label %85, label %7
85: ; preds = %81
ret i32 %76
}