int hdate_days_from_3744(int hebrew_year) {
  int years_from_3744;
  int molad_3744;
  int leap_months;
  int leap_left;
  int months;
  int parts;
  int days;
  int parts_left_in_week;
  int parts_left_in_day;
  int week_day;
  years_from_3744 = hebrew_year - 3744;
  molad_3744 = ((1 + 6) * 1080 + 779);
  leap_months = (years_from_3744 * 7 + 1) / 19;
  leap_left = (years_from_3744 * 7 + 1) % 19;
  months = years_from_3744 * 12 + leap_months;
  parts = months * ((24 * 1080) + ((12) * 1080 + 793)) + molad_3744;
  days = months * 28 + parts / (24 * 1080) - 2;
  parts_left_in_week = parts % (7 * (24 * 1080));
  parts_left_in_day = parts % (24 * 1080);
  week_day = parts_left_in_week / (24 * 1080);
  if ((leap_left < 12 && week_day == 3 &&
       parts_left_in_day >= ((9 + 6) * 1080 + 204)) ||
      (leap_left < 7 && week_day == 2 &&
       parts_left_in_day >= ((15 + 6) * 1080 + 589))) {
    days++, week_day++;
  }
  if (week_day == 1 || week_day == 4 || week_day == 6) {
    days++;
  }
  return days;
}


x86 assembly (clang, -O0):
<hdate_days_from_3744>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    -0x4(%rbp),%eax
sub    $0xea0,%eax
mov    %eax,-0x8(%rbp)
movl   $0x2093,-0xc(%rbp)
imul   $0x7,-0x8(%rbp),%eax
add    $0x1,%eax
mov    $0x13,%ecx
cltd
idiv   %ecx
mov    %eax,-0x10(%rbp)
imul   $0x7,-0x8(%rbp),%eax
add    $0x1,%eax
mov    $0x13,%ecx
cltd
idiv   %ecx
mov    %edx,-0x14(%rbp)
imul   $0xc,-0x8(%rbp),%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x18(%rbp)
imul   $0x9af9,-0x18(%rbp),%eax
add    -0xc(%rbp),%eax
mov    %eax,-0x1c(%rbp)
imul   $0x1c,-0x18(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x1c(%rbp),%eax
mov    $0x6540,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x30(%rbp),%eax
add    %ecx,%eax
sub    $0x2,%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
mov    $0x2c4c0,%ecx
cltd
idiv   %ecx
mov    %edx,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
mov    $0x6540,%ecx
cltd
idiv   %ecx
mov    %edx,-0x28(%rbp)
mov    -0x24(%rbp),%eax
mov    $0x6540,%ecx
cltd
idiv   %ecx
mov    %eax,-0x2c(%rbp)
cmpl   $0xc,-0x14(%rbp)
jge    11be <hdate_days_from_3744+0xbe>
cmpl   $0x3,-0x2c(%rbp)
jne    11be <hdate_days_from_3744+0xbe>
cmpl   $0x4014,-0x28(%rbp)
jge    11df <hdate_days_from_3744+0xdf>
cmpl   $0x7,-0x14(%rbp)
jge    11f1 <hdate_days_from_3744+0xf1>
cmpl   $0x2,-0x2c(%rbp)
jne    11f1 <hdate_days_from_3744+0xf1>
cmpl   $0x5ae5,-0x28(%rbp)
jl     11f1 <hdate_days_from_3744+0xf1>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x1,-0x2c(%rbp)
je     120f <hdate_days_from_3744+0x10f>
cmpl   $0x4,-0x2c(%rbp)
je     120f <hdate_days_from_3744+0x10f>
cmpl   $0x6,-0x2c(%rbp)
jne    1218 <hdate_days_from_3744+0x118>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<hdate_days_from_3744>:
lea    -0x7500(,%rdi,8),%eax
add    $0xfffff160,%edi
sub    %edi,%eax
add    $0x1,%eax
movslq %eax,%r8
imul   $0x6bca1af3,%r8,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x23,%rax
add    %ecx,%eax
lea    (%rax,%rax,8),%ecx
lea    (%rax,%rcx,2),%ecx
sub    %ecx,%r8d
lea    (%rdi,%rdi,2),%ecx
lea    (%rax,%rcx,4),%eax
imul   $0x9af9,%eax,%ecx
add    $0x2093,%ecx
lea    (%rax,%rax,8),%edx
lea    (%rdx,%rdx,2),%edx
add    %eax,%edx
movslq %ecx,%rcx
imul   $0x50e89cc3,%rcx,%rax
mov    %rax,%rsi
shr    $0x3f,%rsi
sar    $0x2d,%rax
add    %esi,%eax
add    %eax,%edx
imul   $0x2e3bc74b,%rcx,%rsi
mov    %rsi,%rdi
shr    $0x3f,%rdi
sar    $0x2f,%rsi
add    %edi,%esi
imul   $0x2c4c0,%esi,%edi
mov    %ecx,%esi
sub    %edi,%esi
imul   $0x6540,%eax,%eax
sub    %eax,%ecx
movslq %esi,%rax
imul   $0x50e89cc3,%rax,%rdi
mov    %rdi,%rax
shr    $0x3f,%rax
sar    $0x2d,%rdi
add    %eax,%edi
cmp    $0xb,%r8d
jg     11bd <hdate_days_from_3744+0xbd>
lea    -0x12fc0(%rsi),%eax
cmp    $0x653f,%eax
ja     11bd <hdate_days_from_3744+0xbd>
cmp    $0x4013,%ecx
jg     11dc <hdate_days_from_3744+0xdc>
lea    -0x2(%rdx),%eax
cmp    $0x6,%r8d
jg     11e4 <hdate_days_from_3744+0xe4>
add    $0xffff3580,%esi
cmp    $0x653f,%esi
ja     11e4 <hdate_days_from_3744+0xe4>
cmp    $0x5ae5,%ecx
jl     11e4 <hdate_days_from_3744+0xe4>
add    $0xffffffff,%edx
add    $0x1,%edi
mov    %edx,%eax
cmp    $0x6,%edi
ja     11f6 <hdate_days_from_3744+0xf6>
mov    $0x52,%ecx
bt     %edi,%ecx
jae    11f6 <hdate_days_from_3744+0xf6>
add    $0x1,%eax
ret

LLVM IR (-O0):
define i32 @hdate_days_from_3744(i32 %0) {
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
store i32 %0, i32* %2
%13 = load i32, i32* %2
%14 = sub nsw i32 %13, 3744
store i32 %14, i32* %3
store i32 8339, i32* %4
%15 = load i32, i32* %3
%16 = mul nsw i32 %15, 7
%17 = add nsw i32 %16, 1
%18 = sdiv i32 %17, 19
store i32 %18, i32* %5
%19 = load i32, i32* %3
%20 = mul nsw i32 %19, 7
%21 = add nsw i32 %20, 1
%22 = srem i32 %21, 19
store i32 %22, i32* %6
%23 = load i32, i32* %3
%24 = mul nsw i32 %23, 12
%25 = load i32, i32* %5
%26 = add nsw i32 %24, %25
store i32 %26, i32* %7
%27 = load i32, i32* %7
%28 = mul nsw i32 %27, 39673
%29 = load i32, i32* %4
%30 = add nsw i32 %28, %29
store i32 %30, i32* %8
%31 = load i32, i32* %7
%32 = mul nsw i32 %31, 28
%33 = load i32, i32* %8
%34 = sdiv i32 %33, 25920
%35 = add nsw i32 %32, %34
%36 = sub nsw i32 %35, 2
store i32 %36, i32* %9
%37 = load i32, i32* %8
%38 = srem i32 %37, 181440
store i32 %38, i32* %10
%39 = load i32, i32* %8
%40 = srem i32 %39, 25920
store i32 %40, i32* %11
%41 = load i32, i32* %10
%42 = sdiv i32 %41, 25920
store i32 %42, i32* %12
%43 = load i32, i32* %6
%44 = icmp slt i32 %43, 12
br i1 %44, label %45, label %51
45: ; preds = %1
%46 = load i32, i32* %12
%47 = icmp eq i32 %46, 3
br i1 %47, label %48, label %51
48: ; preds = %45
%49 = load i32, i32* %11
%50 = icmp sge i32 %49, 16404
br i1 %50, label %60, label %51
51: ; preds = %48, %45, %1
%52 = load i32, i32* %6
%53 = icmp slt i32 %52, 7
br i1 %53, label %54, label %65
54: ; preds = %51
%55 = load i32, i32* %12
%56 = icmp eq i32 %55, 2
br i1 %56, label %57, label %65
57: ; preds = %54
%58 = load i32, i32* %11
%59 = icmp sge i32 %58, 23269
br i1 %59, label %60, label %65
60: ; preds = %57, %48
%61 = load i32, i32* %9
%62 = add nsw i32 %61, 1
store i32 %62, i32* %9
%63 = load i32, i32* %12
%64 = add nsw i32 %63, 1
store i32 %64, i32* %12
br label %65
65: ; preds = %60, %57, %54, %51
%66 = load i32, i32* %12
%67 = icmp eq i32 %66, 1
br i1 %67, label %74, label %68
68: ; preds = %65
%69 = load i32, i32* %12
%70 = icmp eq i32 %69, 4
br i1 %70, label %74, label %71
71: ; preds = %68
%72 = load i32, i32* %12
%73 = icmp eq i32 %72, 6
br i1 %73, label %74, label %77
74: ; preds = %71, %68, %65
%75 = load i32, i32* %9
%76 = add nsw i32 %75, 1
store i32 %76, i32* %9
br label %77
77: ; preds = %74, %71
%78 = load i32, i32* %9
ret i32 %78
}

LLVM IR (-O2):
define i32 @hdate_days_from_3744(i32 %0) {
%2 = add nsw i32 %0, -3744
%3 = mul nsw i32 %2, 7
%4 = add nsw i32 %3, 1
%5 = sdiv i32 %4, 19
%6 = srem i32 %4, 19
%7 = mul nsw i32 %2, 12
%8 = add nsw i32 %5, %7
%9 = mul nsw i32 %8, 39673
%10 = add nsw i32 %9, 8339
%11 = mul nsw i32 %8, 28
%12 = sdiv i32 %10, 25920
%13 = add nsw i32 %12, %11
%14 = srem i32 %10, 181440
%15 = srem i32 %10, 25920
%16 = sdiv i32 %14, 25920
%17 = icmp slt i32 %6, 12
%18 = add nsw i32 %14, -77760
%19 = icmp ult i32 %18, 25920
%20 = select i1 %17, i1 %19, i1 false
%21 = icmp sgt i32 %15, 16403
%22 = select i1 %20, i1 %21, i1 false
br i1 %22, label %31, label %23
23: ; preds = %1
%24 = add nsw i32 %13, -2
%25 = icmp slt i32 %6, 7
%26 = add nsw i32 %14, -51840
%27 = icmp ult i32 %26, 25920
%28 = select i1 %25, i1 %27, i1 false
%29 = icmp sgt i32 %15, 23268
%30 = select i1 %28, i1 %29, i1 false
br i1 %30, label %31, label %34
31: ; preds = %23, %1
%32 = add nsw i32 %13, -1
%33 = add nsw i32 %16, 1
br label %34
34: ; preds = %31, %23
%35 = phi i32 [ %32, %31 ], [ %24, %23 ]
%36 = phi i32 [ %33, %31 ], [ %16, %23 ]
switch i32 %36, label %39 [
i32 6, label %37
i32 4, label %37
i32 1, label %37
]
37: ; preds = %34, %34, %34
%38 = add nsw i32 %35, 1
br label %39
39: ; preds = %34, %37
%40 = phi i32 [ %38, %37 ], [ %35, %34 ]
ret i32 %40
}