int main(void) {
  unsigned char a = 0xAA;
  if ((a & 0b00000001) == 0b00000001) {
    a = a & 0b11111110;
  } else {
    a = a | 0b00000001;
  }
  if ((a & 0b00000010) == 0b00000010) {
    a = a & 0b11111101;
  } else {
    a = a | 0b00000010;
  }
  if ((a & 0b00000100) == 0b00000100) {
    a = a & 0b11111011;
  } else {
    a = a | 0b00000100;
  }
  if ((a & 0b00001000) == 0b00001000) {
    a = a & 0b11110111;
  } else {
    a = a | 0b00001000;
  }
  if ((a & 0b00010000) == 0b00010000) {
    a = a & 0b11101111;
  } else {
    a = a | 0b00010000;
  }
  if ((a & 0b00100000) == 0b00100000) {
    a = a & 0b11011111;
  } else {
    a = a | 0b00100000;
  }
  if ((a & 0b01000000) == 0b01000000) {
    a = a & 0b10111111;
  } else {
    a = a | 0b01000000;
  }
  if ((a & 0b10000000) == 0b10000000) {
    a = a & 0b01111111;
  } else {
    a = a | 0b10000000;
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
movl   $0x0,-0x4(%rbp)
movb   $0xaa,-0x5(%rbp)
movzbl -0x5(%rbp),%eax
and    $0x1,%eax
cmp    $0x1,%eax
jne    1130 <main+0x30>
movzbl -0x5(%rbp),%eax
and    $0xfe,%eax
mov    %al,-0x5(%rbp)
jmp    113a <main+0x3a>
movzbl -0x5(%rbp),%eax
or     $0x1,%eax
mov    %al,-0x5(%rbp)
movzbl -0x5(%rbp),%eax
and    $0x2,%eax
cmp    $0x2,%eax
jne    115b <main+0x5b>
movzbl -0x5(%rbp),%eax
and    $0xfd,%eax
mov    %al,-0x5(%rbp)
jmp    1165 <main+0x65>
movzbl -0x5(%rbp),%eax
or     $0x2,%eax
mov    %al,-0x5(%rbp)
movzbl -0x5(%rbp),%eax
and    $0x4,%eax
cmp    $0x4,%eax
jne    1186 <main+0x86>
movzbl -0x5(%rbp),%eax
and    $0xfb,%eax
mov    %al,-0x5(%rbp)
jmp    1190 <main+0x90>
movzbl -0x5(%rbp),%eax
or     $0x4,%eax
mov    %al,-0x5(%rbp)
movzbl -0x5(%rbp),%eax
and    $0x8,%eax
cmp    $0x8,%eax
jne    11b1 <main+0xb1>
movzbl -0x5(%rbp),%eax
and    $0xf7,%eax
mov    %al,-0x5(%rbp)
jmp    11bb <main+0xbb>
movzbl -0x5(%rbp),%eax
or     $0x8,%eax
mov    %al,-0x5(%rbp)
movzbl -0x5(%rbp),%eax
and    $0x10,%eax
cmp    $0x10,%eax
jne    11dc <main+0xdc>
movzbl -0x5(%rbp),%eax
and    $0xef,%eax
mov    %al,-0x5(%rbp)
jmp    11e6 <main+0xe6>
movzbl -0x5(%rbp),%eax
or     $0x10,%eax
mov    %al,-0x5(%rbp)
movzbl -0x5(%rbp),%eax
and    $0x20,%eax
cmp    $0x20,%eax
jne    1207 <main+0x107>
movzbl -0x5(%rbp),%eax
and    $0xdf,%eax
mov    %al,-0x5(%rbp)
jmp    1211 <main+0x111>
movzbl -0x5(%rbp),%eax
or     $0x20,%eax
mov    %al,-0x5(%rbp)
movzbl -0x5(%rbp),%eax
and    $0x40,%eax
cmp    $0x40,%eax
jne    1232 <main+0x132>
movzbl -0x5(%rbp),%eax
and    $0xbf,%eax
mov    %al,-0x5(%rbp)
jmp    123c <main+0x13c>
movzbl -0x5(%rbp),%eax
or     $0x40,%eax
mov    %al,-0x5(%rbp)
movzbl -0x5(%rbp),%eax
and    $0x80,%eax
cmp    $0x80,%eax
jne    125f <main+0x15f>
movzbl -0x5(%rbp),%eax
and    $0x7f,%eax
mov    %al,-0x5(%rbp)
jmp    126b <main+0x16b>
movzbl -0x5(%rbp),%eax
or     $0x80,%eax
mov    %al,-0x5(%rbp)
xor    %eax,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
xor    %eax,%eax
ret

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

LLVM IR (-O2):
define i32 @main() {
ret i32 0
}