int pdu_relative_validity(unsigned minutes) {
  int validity;
  if (minutes <= 720)
    validity = (((minutes) + (5) - 1) / (5)) - 1;
  else if (minutes <= 1440)
    validity = (((minutes) + (30) - 1) / (30)) + 119;
  else if (minutes <= 43200)
    validity = (((minutes) + (1440) - 1) / (1440)) + 166;
  else if (minutes <= 635040)
    validity = (((minutes) + (10080) - 1) / (10080)) + 192;
  else
    validity = 0xFF;
  return validity;
}


x86 assembly (clang, -O0):
<pdu_relative_validity>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
cmpl   $0x2d0,-0x4(%rbp)
ja     1131 <pdu_relative_validity+0x31>
mov    -0x4(%rbp),%eax
add    $0x5,%eax
sub    $0x1,%eax
mov    $0x5,%ecx
xor    %edx,%edx
div    %ecx
sub    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    11cd <pdu_relative_validity+0xcd>
cmpl   $0x5a0,-0x4(%rbp)
ja     115b <pdu_relative_validity+0x5b>
mov    -0x4(%rbp),%eax
add    $0x1e,%eax
sub    $0x1,%eax
mov    $0x1e,%ecx
xor    %edx,%edx
div    %ecx
add    $0x77,%eax
mov    %eax,-0x8(%rbp)
jmp    11c8 <pdu_relative_validity+0xc8>
cmpl   $0xa8c0,-0x4(%rbp)
ja     1189 <pdu_relative_validity+0x89>
mov    -0x4(%rbp),%eax
add    $0x5a0,%eax
sub    $0x1,%eax
mov    $0x5a0,%ecx
xor    %edx,%edx
div    %ecx
add    $0xa6,%eax
mov    %eax,-0x8(%rbp)
jmp    11c3 <pdu_relative_validity+0xc3>
cmpl   $0x9b0a0,-0x4(%rbp)
ja     11b7 <pdu_relative_validity+0xb7>
mov    -0x4(%rbp),%eax
add    $0x2760,%eax
sub    $0x1,%eax
mov    $0x2760,%ecx
xor    %edx,%edx
div    %ecx
add    $0xc0,%eax
mov    %eax,-0x8(%rbp)
jmp    11be <pdu_relative_validity+0xbe>
movl   $0xff,-0x8(%rbp)
jmp    11c3 <pdu_relative_validity+0xc3>
jmp    11c8 <pdu_relative_validity+0xc8>
jmp    11cd <pdu_relative_validity+0xcd>
mov    -0x8(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<pdu_relative_validity>:
cmp    $0x2d0,%edi
ja     111b <pdu_relative_validity+0x1b>
add    $0x4,%edi
movzwl %di,%eax
imul   $0xcccd,%eax,%eax
shr    $0x12,%eax
add    $0xffffffff,%eax
ret
cmp    $0x5a0,%edi
ja     1136 <pdu_relative_validity+0x36>
add    $0x1d,%edi
movzwl %di,%eax
imul   $0x8889,%eax,%eax
shr    $0x14,%eax
add    $0x77,%eax
ret
cmp    $0xa8c0,%edi
ja     1156 <pdu_relative_validity+0x56>
add    $0x59f,%edi
movzwl %di,%eax
imul   $0x2d83,%eax,%eax
shr    $0x18,%eax
add    $0xa6,%eax
ret
mov    $0xff,%eax
cmp    $0x9b0a0,%edi
ja     117c <pdu_relative_validity+0x7c>
add    $0x275f,%edi
shr    $0x5,%edi
imul   $0x6806807,%rdi,%rax
shr    $0x23,%rax
add    $0xc0,%eax
ret

LLVM IR (-O0):
define i32 @pdu_relative_validity(i32 %0) {
%2 = alloca i32
%3 = alloca i32
store i32 %0, i32* %2
%4 = load i32, i32* %2
%5 = icmp ule i32 %4, 720
br i1 %5, label %6, label %12
6: ; preds = %1
%7 = load i32, i32* %2
%8 = add i32 %7, 5
%9 = sub i32 %8, 1
%10 = udiv i32 %9, 5
%11 = sub i32 %10, 1
store i32 %11, i32* %3
br label %43
12: ; preds = %1
%13 = load i32, i32* %2
%14 = icmp ule i32 %13, 1440
br i1 %14, label %15, label %21
15: ; preds = %12
%16 = load i32, i32* %2
%17 = add i32 %16, 30
%18 = sub i32 %17, 1
%19 = udiv i32 %18, 30
%20 = add i32 %19, 119
store i32 %20, i32* %3
br label %42
21: ; preds = %12
%22 = load i32, i32* %2
%23 = icmp ule i32 %22, 43200
br i1 %23, label %24, label %30
24: ; preds = %21
%25 = load i32, i32* %2
%26 = add i32 %25, 1440
%27 = sub i32 %26, 1
%28 = udiv i32 %27, 1440
%29 = add i32 %28, 166
store i32 %29, i32* %3
br label %41
30: ; preds = %21
%31 = load i32, i32* %2
%32 = icmp ule i32 %31, 635040
br i1 %32, label %33, label %39
33: ; preds = %30
%34 = load i32, i32* %2
%35 = add i32 %34, 10080
%36 = sub i32 %35, 1
%37 = udiv i32 %36, 10080
%38 = add i32 %37, 192
store i32 %38, i32* %3
br label %40
39: ; preds = %30
store i32 255, i32* %3
br label %40
40: ; preds = %39, %33
br label %41
41: ; preds = %40, %24
br label %42
42: ; preds = %41, %15
br label %43
43: ; preds = %42, %6
%44 = load i32, i32* %3
ret i32 %44
}

LLVM IR (-O2):
define i32 @pdu_relative_validity(i32 %0) {
%2 = icmp ult i32 %0, 721
br i1 %2, label %3, label %9
3: ; preds = %1
%4 = trunc i32 %0 to i16
%5 = add nuw nsw i16 %4, 4
%6 = udiv i16 %5, 5
%7 = zext i16 %6 to i32
%8 = add nsw i32 %7, -1
br label %31
9: ; preds = %1
%10 = icmp ult i32 %0, 1441
br i1 %10, label %11, label %17
11: ; preds = %9
%12 = trunc i32 %0 to i16
%13 = add nuw nsw i16 %12, 29
%14 = udiv i16 %13, 30
%15 = add nuw nsw i16 %14, 119
%16 = zext i16 %15 to i32
br label %31
17: ; preds = %9
%18 = icmp ult i32 %0, 43201
br i1 %18, label %19, label %25
19: ; preds = %17
%20 = trunc i32 %0 to i16
%21 = add nuw i16 %20, 1439
%22 = udiv i16 %21, 1440
%23 = add nuw nsw i16 %22, 166
%24 = zext i16 %23 to i32
br label %31
25: ; preds = %17
%26 = icmp ult i32 %0, 635041
br i1 %26, label %27, label %31
27: ; preds = %25
%28 = add nuw nsw i32 %0, 10079
%29 = udiv i32 %28, 10080
%30 = add nuw nsw i32 %29, 192
br label %31
31: ; preds = %25, %11, %27, %19, %3
%32 = phi i32 [ %8, %3 ], [ %16, %11 ], [ %24, %19 ], [ %30, %27 ], [ 255, %25 ]
ret i32 %32
}