void f(int x) {
  if ((8 & x) == 3) {
  }
  if ((x & 8) == 4) {
  }
  if ((x & 8) != 4) {
  }
  if ((2 & x) != 4) {
  }
  if ((x | 4) == 3) {
  }
  if ((x | 3) != 4) {
  }
  if ((5 | x) != 3) {
  }
  if ((x & 0x15) == 0x13) {
  }
  if ((0x23 | x) == 0x155) {
  }
  if (!!((8 & x) == 3)) {
  }
  int y = ((8 & x) == 3) ? 1 : 2;
  if ((x & 8) == 8) {
  }
  if ((x & 8) != 8) {
  }
  if ((x | 4) == 4) {
  }
  if ((x | 4) != 4) {
  }
  if ((x & 9) == 8) {
  }
  if ((x & 9) != 8) {
  }
  if ((x | 4) == 5) {
  }
  if ((x | 4) != 5) {
  }
  if ((x & 2) == 8) {
  }
  if ((x | 2) == 4) {
  }
}


x86 assembly (clang, -O0):
<f>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    -0x4(%rbp),%eax
and    $0x8,%eax
cmp    $0x3,%eax
jne    111b <f+0x1b>
jmp    111b <f+0x1b>
mov    -0x4(%rbp),%eax
and    $0x8,%eax
cmp    $0x4,%eax
jne    112f <f+0x2f>
jmp    112f <f+0x2f>
mov    -0x4(%rbp),%eax
and    $0x8,%eax
cmp    $0x4,%eax
je     1143 <f+0x43>
jmp    1143 <f+0x43>
mov    -0x4(%rbp),%eax
and    $0x2,%eax
cmp    $0x4,%eax
je     1157 <f+0x57>
jmp    1157 <f+0x57>
mov    -0x4(%rbp),%eax
or     $0x4,%eax
cmp    $0x3,%eax
jne    116b <f+0x6b>
jmp    116b <f+0x6b>
mov    -0x4(%rbp),%eax
or     $0x3,%eax
cmp    $0x4,%eax
je     117f <f+0x7f>
jmp    117f <f+0x7f>
mov    -0x4(%rbp),%eax
or     $0x5,%eax
cmp    $0x3,%eax
je     1193 <f+0x93>
jmp    1193 <f+0x93>
mov    -0x4(%rbp),%eax
and    $0x15,%eax
cmp    $0x13,%eax
jne    11a7 <f+0xa7>
jmp    11a7 <f+0xa7>
mov    -0x4(%rbp),%eax
or     $0x23,%eax
cmp    $0x155,%eax
jne    11bd <f+0xbd>
jmp    11bd <f+0xbd>
mov    -0x4(%rbp),%eax
and    $0x8,%eax
cmp    $0x3,%eax
jne    11d1 <f+0xd1>
jmp    11d1 <f+0xd1>
mov    -0x4(%rbp),%edx
and    $0x8,%edx
mov    $0x2,%eax
mov    $0x1,%ecx
cmp    $0x3,%edx
cmove  %ecx,%eax
mov    %eax,-0x8(%rbp)
mov    -0x4(%rbp),%eax
and    $0x8,%eax
cmp    $0x8,%eax
jne    11fe <f+0xfe>
jmp    11fe <f+0xfe>
mov    -0x4(%rbp),%eax
and    $0x8,%eax
cmp    $0x8,%eax
je     1212 <f+0x112>
jmp    1212 <f+0x112>
mov    -0x4(%rbp),%eax
or     $0x4,%eax
cmp    $0x4,%eax
jne    1226 <f+0x126>
jmp    1226 <f+0x126>
mov    -0x4(%rbp),%eax
or     $0x4,%eax
cmp    $0x4,%eax
je     123a <f+0x13a>
jmp    123a <f+0x13a>
mov    -0x4(%rbp),%eax
and    $0x9,%eax
cmp    $0x8,%eax
jne    124e <f+0x14e>
jmp    124e <f+0x14e>
mov    -0x4(%rbp),%eax
and    $0x9,%eax
cmp    $0x8,%eax
je     1262 <f+0x162>
jmp    1262 <f+0x162>
mov    -0x4(%rbp),%eax
or     $0x4,%eax
cmp    $0x5,%eax
jne    1276 <f+0x176>
jmp    1276 <f+0x176>
mov    -0x4(%rbp),%eax
or     $0x4,%eax
cmp    $0x5,%eax
je     128a <f+0x18a>
jmp    128a <f+0x18a>
mov    -0x4(%rbp),%eax
and    $0x2,%eax
cmp    $0x8,%eax
jne    129e <f+0x19e>
jmp    129e <f+0x19e>
mov    -0x4(%rbp),%eax
or     $0x2,%eax
cmp    $0x4,%eax
jne    12b2 <f+0x1b2>
jmp    12b2 <f+0x1b2>
pop    %rbp
ret

x86 assembly (clang, -O2):
<f>:
ret

LLVM IR (-O0):
define void @f(i32 %0) {
%2 = alloca i32
%3 = alloca i32
store i32 %0, i32* %2
%4 = load i32, i32* %2
%5 = and i32 8, %4
%6 = icmp eq i32 %5, 3
br i1 %6, label %7, label %8
7: ; preds = %1
br label %8
8: ; preds = %7, %1
%9 = load i32, i32* %2
%10 = and i32 %9, 8
%11 = icmp eq i32 %10, 4
br i1 %11, label %12, label %13
12: ; preds = %8
br label %13
13: ; preds = %12, %8
%14 = load i32, i32* %2
%15 = and i32 %14, 8
%16 = icmp ne i32 %15, 4
br i1 %16, label %17, label %18
17: ; preds = %13
br label %18
18: ; preds = %17, %13
%19 = load i32, i32* %2
%20 = and i32 2, %19
%21 = icmp ne i32 %20, 4
br i1 %21, label %22, label %23
22: ; preds = %18
br label %23
23: ; preds = %22, %18
%24 = load i32, i32* %2
%25 = or i32 %24, 4
%26 = icmp eq i32 %25, 3
br i1 %26, label %27, label %28
27: ; preds = %23
br label %28
28: ; preds = %27, %23
%29 = load i32, i32* %2
%30 = or i32 %29, 3
%31 = icmp ne i32 %30, 4
br i1 %31, label %32, label %33
32: ; preds = %28
br label %33
33: ; preds = %32, %28
%34 = load i32, i32* %2
%35 = or i32 5, %34
%36 = icmp ne i32 %35, 3
br i1 %36, label %37, label %38
37: ; preds = %33
br label %38
38: ; preds = %37, %33
%39 = load i32, i32* %2
%40 = and i32 %39, 21
%41 = icmp eq i32 %40, 19
br i1 %41, label %42, label %43
42: ; preds = %38
br label %43
43: ; preds = %42, %38
%44 = load i32, i32* %2
%45 = or i32 35, %44
%46 = icmp eq i32 %45, 341
br i1 %46, label %47, label %48
47: ; preds = %43
br label %48
48: ; preds = %47, %43
%49 = load i32, i32* %2
%50 = and i32 8, %49
%51 = icmp eq i32 %50, 3
br i1 %51, label %52, label %53
52: ; preds = %48
br label %53
53: ; preds = %52, %48
%54 = load i32, i32* %2
%55 = and i32 8, %54
%56 = icmp eq i32 %55, 3
%57 = zext i1 %56 to i64
%58 = select i1 %56, i32 1, i32 2
store i32 %58, i32* %3
%59 = load i32, i32* %2
%60 = and i32 %59, 8
%61 = icmp eq i32 %60, 8
br i1 %61, label %62, label %63
62: ; preds = %53
br label %63
63: ; preds = %62, %53
%64 = load i32, i32* %2
%65 = and i32 %64, 8
%66 = icmp ne i32 %65, 8
br i1 %66, label %67, label %68
67: ; preds = %63
br label %68
68: ; preds = %67, %63
%69 = load i32, i32* %2
%70 = or i32 %69, 4
%71 = icmp eq i32 %70, 4
br i1 %71, label %72, label %73
72: ; preds = %68
br label %73
73: ; preds = %72, %68
%74 = load i32, i32* %2
%75 = or i32 %74, 4
%76 = icmp ne i32 %75, 4
br i1 %76, label %77, label %78
77: ; preds = %73
br label %78
78: ; preds = %77, %73
%79 = load i32, i32* %2
%80 = and i32 %79, 9
%81 = icmp eq i32 %80, 8
br i1 %81, label %82, label %83
82: ; preds = %78
br label %83
83: ; preds = %82, %78
%84 = load i32, i32* %2
%85 = and i32 %84, 9
%86 = icmp ne i32 %85, 8
br i1 %86, label %87, label %88
87: ; preds = %83
br label %88
88: ; preds = %87, %83
%89 = load i32, i32* %2
%90 = or i32 %89, 4
%91 = icmp eq i32 %90, 5
br i1 %91, label %92, label %93
92: ; preds = %88
br label %93
93: ; preds = %92, %88
%94 = load i32, i32* %2
%95 = or i32 %94, 4
%96 = icmp ne i32 %95, 5
br i1 %96, label %97, label %98
97: ; preds = %93
br label %98
98: ; preds = %97, %93
%99 = load i32, i32* %2
%100 = and i32 %99, 2
%101 = icmp eq i32 %100, 8
br i1 %101, label %102, label %103
102: ; preds = %98
br label %103
103: ; preds = %102, %98
%104 = load i32, i32* %2
%105 = or i32 %104, 2
%106 = icmp eq i32 %105, 4
br i1 %106, label %107, label %108
107: ; preds = %103
br label %108
108: ; preds = %107, %103
ret void
}

LLVM IR (-O2):
define void @f(i32 %0) {
ret void
}