#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
bool subtractivePreventsMoreUseOfBaseValue(int baseValue) {
  bool isPrevented = true;
  switch (baseValue) {
  case 10:
  case 100:
  case 1000:
    isPrevented = false;
    break;
  case 1:
  case 5:
  case 50:
  case 500:
  default:
    isPrevented = true;
  }
  return isPrevented;
}


x86 assembly (clang, -O0):
<subtractivePreventsMoreUseOfBaseValue>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
movl   $0x1,-0x8(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0xc(%rbp)
sub    $0x1,%eax
je     1198 <subtractivePreventsMoreUseOfBaseValue+0x98>
jmp    1122 <subtractivePreventsMoreUseOfBaseValue+0x22>
mov    -0xc(%rbp),%eax
sub    $0x5,%eax
je     1198 <subtractivePreventsMoreUseOfBaseValue+0x98>
jmp    1133 <subtractivePreventsMoreUseOfBaseValue+0x33>
mov    -0xc(%rbp),%eax
sub    $0xa,%eax
je     118c <subtractivePreventsMoreUseOfBaseValue+0x8c>
jmp    1144 <subtractivePreventsMoreUseOfBaseValue+0x44>
mov    -0xc(%rbp),%eax
sub    $0x32,%eax
je     1198 <subtractivePreventsMoreUseOfBaseValue+0x98>
jmp    1155 <subtractivePreventsMoreUseOfBaseValue+0x55>
mov    -0xc(%rbp),%eax
sub    $0x64,%eax
je     118c <subtractivePreventsMoreUseOfBaseValue+0x8c>
jmp    1166 <subtractivePreventsMoreUseOfBaseValue+0x66>
mov    -0xc(%rbp),%eax
sub    $0x1f4,%eax
je     1198 <subtractivePreventsMoreUseOfBaseValue+0x98>
jmp    1179 <subtractivePreventsMoreUseOfBaseValue+0x79>
mov    -0xc(%rbp),%eax
sub    $0x3e8,%eax
jne    119d <subtractivePreventsMoreUseOfBaseValue+0x9d>
jmp    118c <subtractivePreventsMoreUseOfBaseValue+0x8c>
movl   $0x0,-0x8(%rbp)
jmp    11a4 <subtractivePreventsMoreUseOfBaseValue+0xa4>
jmp    119d <subtractivePreventsMoreUseOfBaseValue+0x9d>
movl   $0x1,-0x8(%rbp)
mov    -0x8(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<subtractivePreventsMoreUseOfBaseValue>:
xor    %eax,%eax
cmp    $0xa,%edi
je     1119 <subtractivePreventsMoreUseOfBaseValue+0x19>
cmp    $0x64,%edi
je     1119 <subtractivePreventsMoreUseOfBaseValue+0x19>
cmp    $0x3e8,%edi
je     1119 <subtractivePreventsMoreUseOfBaseValue+0x19>
mov    $0x1,%eax
ret

LLVM IR (-O0):
define i32 @subtractivePreventsMoreUseOfBaseValue(i32 %0) {
%2 = alloca i32
%3 = alloca i32
store i32 %0, i32* %2
store i32 1, i32* %3
%4 = load i32, i32* %2
switch i32 %4, label %7 [
i32 10, label %5
i32 100, label %5
i32 1000, label %5
i32 1, label %6
i32 5, label %6
i32 50, label %6
i32 500, label %6
]
5: ; preds = %1, %1, %1
store i32 0, i32* %3
br label %8
6: ; preds = %1, %1, %1, %1
br label %7
7: ; preds = %1, %6
store i32 1, i32* %3
br label %8
8: ; preds = %7, %5
%9 = load i32, i32* %3
ret i32 %9
}

LLVM IR (-O2):
define i32 @subtractivePreventsMoreUseOfBaseValue(i32 %0) {
switch i32 %0, label %2 [
i32 10, label %3
i32 100, label %3
i32 1000, label %3
]
2: ; preds = %1
br label %3
3: ; preds = %1, %1, %1, %2
%4 = phi i32 [ 1, %2 ], [ 0, %1 ], [ 0, %1 ], [ 0, %1 ]
ret i32 %4
}