void generalFailureOrder(_Atomic(int) *ptr, int *ptr2, int success, int fail) {
  __c11_atomic_compare_exchange_strong(ptr, ptr2, 42, success, fail);
}


x86 assembly (clang, -O0):
<generalFailureOrder>:
push   %rbp
mov    %rsp,%rbp
sub    $0x38,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x10(%rbp),%rcx
mov    %rcx,-0x38(%rbp)
movl   $0x2a,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
mov    %ecx,-0x2c(%rbp)
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x28(%rbp)
sub    $0x4,%eax
ja     115c <generalFailureOrder+0x5c>
mov    -0x28(%rbp),%rax
lea    0xead(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
sub    $0x2,%eax
jb     1244 <generalFailureOrder+0x144>
jmp    1170 <generalFailureOrder+0x70>
mov    -0x2c(%rbp),%eax
sub    $0x5,%eax
je     126d <generalFailureOrder+0x16d>
jmp    121b <generalFailureOrder+0x11b>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
sub    $0x2,%eax
jb     1306 <generalFailureOrder+0x206>
jmp    1195 <generalFailureOrder+0x95>
mov    -0x2c(%rbp),%eax
sub    $0x5,%eax
je     132f <generalFailureOrder+0x22f>
jmp    12dd <generalFailureOrder+0x1dd>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
sub    $0x2,%eax
jb     13c8 <generalFailureOrder+0x2c8>
jmp    11ba <generalFailureOrder+0xba>
mov    -0x2c(%rbp),%eax
sub    $0x5,%eax
je     13f1 <generalFailureOrder+0x2f1>
jmp    139f <generalFailureOrder+0x29f>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
sub    $0x2,%eax
jb     149c <generalFailureOrder+0x39c>
jmp    11df <generalFailureOrder+0xdf>
mov    -0x2c(%rbp),%eax
sub    $0x5,%eax
je     14cb <generalFailureOrder+0x3cb>
jmp    146d <generalFailureOrder+0x36d>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
sub    $0x2,%eax
jb     1582 <generalFailureOrder+0x482>
jmp    1204 <generalFailureOrder+0x104>
mov    -0x2c(%rbp),%eax
sub    $0x5,%eax
je     15b1 <generalFailureOrder+0x4b1>
jmp    1553 <generalFailureOrder+0x453>
add    $0x38,%rsp
pop    %rbp
ret
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0x45(%rbp)
mov    %ecx,-0x44(%rbp)
test   $0x1,%al
jne    12a4 <generalFailureOrder+0x1a4>
jmp    129b <generalFailureOrder+0x19b>
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0x4d(%rbp)
mov    %ecx,-0x4c(%rbp)
test   $0x1,%al
jne    12ba <generalFailureOrder+0x1ba>
jmp    12b1 <generalFailureOrder+0x1b1>
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0x55(%rbp)
mov    %ecx,-0x54(%rbp)
test   $0x1,%al
jne    12d0 <generalFailureOrder+0x1d0>
jmp    12c7 <generalFailureOrder+0x1c7>
jmp    1215 <generalFailureOrder+0x115>
mov    -0x38(%rbp),%rax
mov    -0x44(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0x45(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    1296 <generalFailureOrder+0x196>
mov    -0x38(%rbp),%rax
mov    -0x4c(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0x4d(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    1296 <generalFailureOrder+0x196>
mov    -0x38(%rbp),%rax
mov    -0x54(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0x55(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    1296 <generalFailureOrder+0x196>
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0x5d(%rbp)
mov    %ecx,-0x5c(%rbp)
test   $0x1,%al
jne    1366 <generalFailureOrder+0x266>
jmp    135d <generalFailureOrder+0x25d>
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0x65(%rbp)
mov    %ecx,-0x64(%rbp)
test   $0x1,%al
jne    137c <generalFailureOrder+0x27c>
jmp    1373 <generalFailureOrder+0x273>
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0x6d(%rbp)
mov    %ecx,-0x6c(%rbp)
test   $0x1,%al
jne    1392 <generalFailureOrder+0x292>
jmp    1389 <generalFailureOrder+0x289>
jmp    1215 <generalFailureOrder+0x115>
mov    -0x38(%rbp),%rax
mov    -0x5c(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0x5d(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    1358 <generalFailureOrder+0x258>
mov    -0x38(%rbp),%rax
mov    -0x64(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0x65(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    1358 <generalFailureOrder+0x258>
mov    -0x38(%rbp),%rax
mov    -0x6c(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0x6d(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    1358 <generalFailureOrder+0x258>
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0x75(%rbp)
mov    %ecx,-0x74(%rbp)
test   $0x1,%al
jne    142e <generalFailureOrder+0x32e>
jmp    1425 <generalFailureOrder+0x325>
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0x7d(%rbp)
mov    %ecx,-0x7c(%rbp)
test   $0x1,%al
jne    1444 <generalFailureOrder+0x344>
jmp    143b <generalFailureOrder+0x33b>
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0x85(%rbp)
mov    %ecx,-0x84(%rbp)
test   $0x1,%al
jne    145d <generalFailureOrder+0x35d>
jmp    1451 <generalFailureOrder+0x351>
jmp    1215 <generalFailureOrder+0x115>
mov    -0x38(%rbp),%rax
mov    -0x74(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0x75(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    1420 <generalFailureOrder+0x320>
mov    -0x38(%rbp),%rax
mov    -0x7c(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0x7d(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    1420 <generalFailureOrder+0x320>
mov    -0x38(%rbp),%rax
mov    -0x84(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0x85(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    1420 <generalFailureOrder+0x320>
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0x8d(%rbp)
mov    %ecx,-0x8c(%rbp)
test   $0x1,%al
jne    150b <generalFailureOrder+0x40b>
jmp    14ff <generalFailureOrder+0x3ff>
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0x95(%rbp)
mov    %ecx,-0x94(%rbp)
test   $0x1,%al
jne    1527 <generalFailureOrder+0x427>
jmp    151b <generalFailureOrder+0x41b>
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0x9d(%rbp)
mov    %ecx,-0x9c(%rbp)
test   $0x1,%al
jne    1543 <generalFailureOrder+0x443>
jmp    1537 <generalFailureOrder+0x437>
jmp    1215 <generalFailureOrder+0x115>
mov    -0x38(%rbp),%rax
mov    -0x8c(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0x8d(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    14fa <generalFailureOrder+0x3fa>
mov    -0x38(%rbp),%rax
mov    -0x94(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0x95(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    14fa <generalFailureOrder+0x3fa>
mov    -0x38(%rbp),%rax
mov    -0x9c(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0x9d(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    14fa <generalFailureOrder+0x3fa>
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0xa5(%rbp)
mov    %ecx,-0xa4(%rbp)
test   $0x1,%al
jne    15f1 <generalFailureOrder+0x4f1>
jmp    15e5 <generalFailureOrder+0x4e5>
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0xad(%rbp)
mov    %ecx,-0xac(%rbp)
test   $0x1,%al
jne    160d <generalFailureOrder+0x50d>
jmp    1601 <generalFailureOrder+0x501>
mov    -0x40(%rbp),%rcx
mov    -0x38(%rbp),%rax
mov    (%rax),%eax
mov    -0x1c(%rbp),%edx
lock cmpxchg %edx,(%rcx)
mov    %eax,%ecx
sete   %al
mov    %al,-0xb5(%rbp)
mov    %ecx,-0xb4(%rbp)
test   $0x1,%al
jne    1629 <generalFailureOrder+0x529>
jmp    161d <generalFailureOrder+0x51d>
jmp    1215 <generalFailureOrder+0x115>
mov    -0x38(%rbp),%rax
mov    -0xa4(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0xa5(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    15e0 <generalFailureOrder+0x4e0>
mov    -0x38(%rbp),%rax
mov    -0xac(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0xad(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    15e0 <generalFailureOrder+0x4e0>
mov    -0x38(%rbp),%rax
mov    -0xb4(%rbp),%ecx
mov    %ecx,(%rax)
mov    -0xb5(%rbp),%al
and    $0x1,%al
mov    %al,-0x1d(%rbp)
jmp    15e0 <generalFailureOrder+0x4e0>

x86 assembly (clang, -O2):
<generalFailureOrder>:
add    $0xffffffff,%edx
cmp    $0x4,%edx
ja     1118 <generalFailureOrder+0x18>
lea    0xef1(%rip),%rax
movslq (%rax,%rdx,4),%rdx
add    %rax,%rdx
jmp    *%rdx
lea    -0x1(%rcx),%eax
cmp    $0x2,%eax
jb     1123 <generalFailureOrder+0x23>
cmp    $0x5,%ecx
mov    (%rsi),%eax
mov    $0x2a,%ecx
lock cmpxchg %ecx,(%rdi)
je     1132 <generalFailureOrder+0x32>
mov    %eax,(%rsi)
ret

LLVM IR (-O0):
define void @generalFailureOrder(i32* %0, i32* %1, i32 %2, i32 %3) {
%5 = alloca i32*
%6 = alloca i32*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i8
store i32* %0, i32** %5
store i32* %1, i32** %6
store i32 %2, i32* %7
store i32 %3, i32* %8
%11 = load i32*, i32** %5
%12 = load i32, i32* %7
%13 = load i32*, i32** %6
store i32 42, i32* %9
%14 = load i32, i32* %8
switch i32 %12, label %15 [
i32 1, label %16
i32 2, label %16
i32 3, label %17
i32 4, label %18
i32 5, label %19
]
15: ; preds = %4
switch i32 %14, label %23 [
i32 1, label %29
i32 2, label %29
i32 5, label %35
]
16: ; preds = %4, %4
switch i32 %14, label %51 [
i32 1, label %57
i32 2, label %57
i32 5, label %63
]
17: ; preds = %4
switch i32 %14, label %79 [
i32 1, label %85
i32 2, label %85
i32 5, label %91
]
18: ; preds = %4
switch i32 %14, label %107 [
i32 1, label %113
i32 2, label %113
i32 5, label %119
]
19: ; preds = %4
switch i32 %14, label %135 [
i32 1, label %141
i32 2, label %141
i32 5, label %147
]
20: ; preds = %153, %125, %97, %69, %41
%21 = load i8, i8* %10
%22 = trunc i8 %21 to i1
ret void
23: ; preds = %15
%24 = load i32, i32* %13
%25 = load i32, i32* %9
%26 = cmpxchg i32* %11, i32 %24, i32 %25 monotonic monotonic
%27 = extractvalue { i32, i1 } %26, 0
%28 = extractvalue { i32, i1 } %26, 1
br i1 %28, label %43, label %42
29: ; preds = %15, %15
%30 = load i32, i32* %13
%31 = load i32, i32* %9
%32 = cmpxchg i32* %11, i32 %30, i32 %31 monotonic acquire
%33 = extractvalue { i32, i1 } %32, 0
%34 = extractvalue { i32, i1 } %32, 1
br i1 %34, label %46, label %45
35: ; preds = %15
%36 = load i32, i32* %13
%37 = load i32, i32* %9
%38 = cmpxchg i32* %11, i32 %36, i32 %37 monotonic seq_cst
%39 = extractvalue { i32, i1 } %38, 0
%40 = extractvalue { i32, i1 } %38, 1
br i1 %40, label %49, label %48
41: ; preds = %49, %46, %43
br label %20
42: ; preds = %23
store i32 %27, i32* %13
br label %43
43: ; preds = %42, %23
%44 = zext i1 %28 to i8
store i8 %44, i8* %10
br label %41
45: ; preds = %29
store i32 %33, i32* %13
br label %46
46: ; preds = %45, %29
%47 = zext i1 %34 to i8
store i8 %47, i8* %10
br label %41
48: ; preds = %35
store i32 %39, i32* %13
br label %49
49: ; preds = %48, %35
%50 = zext i1 %40 to i8
store i8 %50, i8* %10
br label %41
51: ; preds = %16
%52 = load i32, i32* %13
%53 = load i32, i32* %9
%54 = cmpxchg i32* %11, i32 %52, i32 %53 acquire monotonic
%55 = extractvalue { i32, i1 } %54, 0
%56 = extractvalue { i32, i1 } %54, 1
br i1 %56, label %71, label %70
57: ; preds = %16, %16
%58 = load i32, i32* %13
%59 = load i32, i32* %9
%60 = cmpxchg i32* %11, i32 %58, i32 %59 acquire acquire
%61 = extractvalue { i32, i1 } %60, 0
%62 = extractvalue { i32, i1 } %60, 1
br i1 %62, label %74, label %73
63: ; preds = %16
%64 = load i32, i32* %13
%65 = load i32, i32* %9
%66 = cmpxchg i32* %11, i32 %64, i32 %65 acquire seq_cst
%67 = extractvalue { i32, i1 } %66, 0
%68 = extractvalue { i32, i1 } %66, 1
br i1 %68, label %77, label %76
69: ; preds = %77, %74, %71
br label %20
70: ; preds = %51
store i32 %55, i32* %13
br label %71
71: ; preds = %70, %51
%72 = zext i1 %56 to i8
store i8 %72, i8* %10
br label %69
73: ; preds = %57
store i32 %61, i32* %13
br label %74
74: ; preds = %73, %57
%75 = zext i1 %62 to i8
store i8 %75, i8* %10
br label %69
76: ; preds = %63
store i32 %67, i32* %13
br label %77
77: ; preds = %76, %63
%78 = zext i1 %68 to i8
store i8 %78, i8* %10
br label %69
79: ; preds = %17
%80 = load i32, i32* %13
%81 = load i32, i32* %9
%82 = cmpxchg i32* %11, i32 %80, i32 %81 release monotonic
%83 = extractvalue { i32, i1 } %82, 0
%84 = extractvalue { i32, i1 } %82, 1
br i1 %84, label %99, label %98
85: ; preds = %17, %17
%86 = load i32, i32* %13
%87 = load i32, i32* %9
%88 = cmpxchg i32* %11, i32 %86, i32 %87 release acquire
%89 = extractvalue { i32, i1 } %88, 0
%90 = extractvalue { i32, i1 } %88, 1
br i1 %90, label %102, label %101
91: ; preds = %17
%92 = load i32, i32* %13
%93 = load i32, i32* %9
%94 = cmpxchg i32* %11, i32 %92, i32 %93 release seq_cst
%95 = extractvalue { i32, i1 } %94, 0
%96 = extractvalue { i32, i1 } %94, 1
br i1 %96, label %105, label %104
97: ; preds = %105, %102, %99
br label %20
98: ; preds = %79
store i32 %83, i32* %13
br label %99
99: ; preds = %98, %79
%100 = zext i1 %84 to i8
store i8 %100, i8* %10
br label %97
101: ; preds = %85
store i32 %89, i32* %13
br label %102
102: ; preds = %101, %85
%103 = zext i1 %90 to i8
store i8 %103, i8* %10
br label %97
104: ; preds = %91
store i32 %95, i32* %13
br label %105
105: ; preds = %104, %91
%106 = zext i1 %96 to i8
store i8 %106, i8* %10
br label %97
107: ; preds = %18
%108 = load i32, i32* %13
%109 = load i32, i32* %9
%110 = cmpxchg i32* %11, i32 %108, i32 %109 acq_rel monotonic
%111 = extractvalue { i32, i1 } %110, 0
%112 = extractvalue { i32, i1 } %110, 1
br i1 %112, label %127, label %126
113: ; preds = %18, %18
%114 = load i32, i32* %13
%115 = load i32, i32* %9
%116 = cmpxchg i32* %11, i32 %114, i32 %115 acq_rel acquire
%117 = extractvalue { i32, i1 } %116, 0
%118 = extractvalue { i32, i1 } %116, 1
br i1 %118, label %130, label %129
119: ; preds = %18
%120 = load i32, i32* %13
%121 = load i32, i32* %9
%122 = cmpxchg i32* %11, i32 %120, i32 %121 acq_rel seq_cst
%123 = extractvalue { i32, i1 } %122, 0
%124 = extractvalue { i32, i1 } %122, 1
br i1 %124, label %133, label %132
125: ; preds = %133, %130, %127
br label %20
126: ; preds = %107
store i32 %111, i32* %13
br label %127
127: ; preds = %126, %107
%128 = zext i1 %112 to i8
store i8 %128, i8* %10
br label %125
129: ; preds = %113
store i32 %117, i32* %13
br label %130
130: ; preds = %129, %113
%131 = zext i1 %118 to i8
store i8 %131, i8* %10
br label %125
132: ; preds = %119
store i32 %123, i32* %13
br label %133
133: ; preds = %132, %119
%134 = zext i1 %124 to i8
store i8 %134, i8* %10
br label %125
135: ; preds = %19
%136 = load i32, i32* %13
%137 = load i32, i32* %9
%138 = cmpxchg i32* %11, i32 %136, i32 %137 seq_cst monotonic
%139 = extractvalue { i32, i1 } %138, 0
%140 = extractvalue { i32, i1 } %138, 1
br i1 %140, label %155, label %154
141: ; preds = %19, %19
%142 = load i32, i32* %13
%143 = load i32, i32* %9
%144 = cmpxchg i32* %11, i32 %142, i32 %143 seq_cst acquire
%145 = extractvalue { i32, i1 } %144, 0
%146 = extractvalue { i32, i1 } %144, 1
br i1 %146, label %158, label %157
147: ; preds = %19
%148 = load i32, i32* %13
%149 = load i32, i32* %9
%150 = cmpxchg i32* %11, i32 %148, i32 %149 seq_cst seq_cst
%151 = extractvalue { i32, i1 } %150, 0
%152 = extractvalue { i32, i1 } %150, 1
br i1 %152, label %161, label %160
153: ; preds = %161, %158, %155
br label %20
154: ; preds = %135
store i32 %139, i32* %13
br label %155
155: ; preds = %154, %135
%156 = zext i1 %140 to i8
store i8 %156, i8* %10
br label %153
157: ; preds = %141
store i32 %145, i32* %13
br label %158
158: ; preds = %157, %141
%159 = zext i1 %146 to i8
store i8 %159, i8* %10
br label %153
160: ; preds = %147
store i32 %151, i32* %13
br label %161
161: ; preds = %160, %147
%162 = zext i1 %152 to i8
store i8 %162, i8* %10
br label %153
}

LLVM IR (-O2):
define void @generalFailureOrder(i32* nocapture %0, i32* %1, i32 %2, i32 %3) {
switch i32 %2, label %5 [
i32 1, label %6
i32 2, label %6
i32 3, label %7
i32 4, label %8
i32 5, label %9
]
5: ; preds = %4
switch i32 %3, label %14 [
i32 1, label %18
i32 2, label %18
i32 5, label %22
]
6: ; preds = %4, %4
switch i32 %3, label %26 [
i32 1, label %30
i32 2, label %30
i32 5, label %34
]
7: ; preds = %4
switch i32 %3, label %38 [
i32 1, label %42
i32 2, label %42
i32 5, label %46
]
8: ; preds = %4
switch i32 %3, label %50 [
i32 1, label %54
i32 2, label %54
i32 5, label %58
]
9: ; preds = %4
switch i32 %3, label %62 [
i32 1, label %66
i32 2, label %66
i32 5, label %70
]
10: ; preds = %70, %66, %62, %58, %54, %50, %46, %42, %38, %34, %30, %26, %22, %18, %14
%11 = phi { i32, i1 } [ %16, %14 ], [ %20, %18 ], [ %24, %22 ], [ %28, %26 ], [ %32, %30 ], [ %36, %34 ], [ %40, %38 ], [ %44, %42 ], [ %48, %46 ], [ %52, %50 ], [ %56, %54 ], [ %60, %58 ], [ %64, %62 ], [ %68, %66 ], [ %72, %70 ]
%12 = extractvalue { i32, i1 } %11, 0
store i32 %12, i32* %1
br label %13
13: ; preds = %10, %70, %66, %62, %58, %54, %50, %46, %42, %38, %34, %30, %26, %22, %18, %14
ret void
14: ; preds = %5
%15 = load i32, i32* %1
%16 = cmpxchg i32* %0, i32 %15, i32 42 monotonic monotonic
%17 = extractvalue { i32, i1 } %16, 1
br i1 %17, label %13, label %10
18: ; preds = %5, %5
%19 = load i32, i32* %1
%20 = cmpxchg i32* %0, i32 %19, i32 42 monotonic acquire
%21 = extractvalue { i32, i1 } %20, 1
br i1 %21, label %13, label %10
22: ; preds = %5
%23 = load i32, i32* %1
%24 = cmpxchg i32* %0, i32 %23, i32 42 monotonic seq_cst
%25 = extractvalue { i32, i1 } %24, 1
br i1 %25, label %13, label %10
26: ; preds = %6
%27 = load i32, i32* %1
%28 = cmpxchg i32* %0, i32 %27, i32 42 acquire monotonic
%29 = extractvalue { i32, i1 } %28, 1
br i1 %29, label %13, label %10
30: ; preds = %6, %6
%31 = load i32, i32* %1
%32 = cmpxchg i32* %0, i32 %31, i32 42 acquire acquire
%33 = extractvalue { i32, i1 } %32, 1
br i1 %33, label %13, label %10
34: ; preds = %6
%35 = load i32, i32* %1
%36 = cmpxchg i32* %0, i32 %35, i32 42 acquire seq_cst
%37 = extractvalue { i32, i1 } %36, 1
br i1 %37, label %13, label %10
38: ; preds = %7
%39 = load i32, i32* %1
%40 = cmpxchg i32* %0, i32 %39, i32 42 release monotonic
%41 = extractvalue { i32, i1 } %40, 1
br i1 %41, label %13, label %10
42: ; preds = %7, %7
%43 = load i32, i32* %1
%44 = cmpxchg i32* %0, i32 %43, i32 42 release acquire
%45 = extractvalue { i32, i1 } %44, 1
br i1 %45, label %13, label %10
46: ; preds = %7
%47 = load i32, i32* %1
%48 = cmpxchg i32* %0, i32 %47, i32 42 release seq_cst
%49 = extractvalue { i32, i1 } %48, 1
br i1 %49, label %13, label %10
50: ; preds = %8
%51 = load i32, i32* %1
%52 = cmpxchg i32* %0, i32 %51, i32 42 acq_rel monotonic
%53 = extractvalue { i32, i1 } %52, 1
br i1 %53, label %13, label %10
54: ; preds = %8, %8
%55 = load i32, i32* %1
%56 = cmpxchg i32* %0, i32 %55, i32 42 acq_rel acquire
%57 = extractvalue { i32, i1 } %56, 1
br i1 %57, label %13, label %10
58: ; preds = %8
%59 = load i32, i32* %1
%60 = cmpxchg i32* %0, i32 %59, i32 42 acq_rel seq_cst
%61 = extractvalue { i32, i1 } %60, 1
br i1 %61, label %13, label %10
62: ; preds = %9
%63 = load i32, i32* %1
%64 = cmpxchg i32* %0, i32 %63, i32 42 seq_cst monotonic
%65 = extractvalue { i32, i1 } %64, 1
br i1 %65, label %13, label %10
66: ; preds = %9, %9
%67 = load i32, i32* %1
%68 = cmpxchg i32* %0, i32 %67, i32 42 seq_cst acquire
%69 = extractvalue { i32, i1 } %68, 1
br i1 %69, label %13, label %10
70: ; preds = %9
%71 = load i32, i32* %1
%72 = cmpxchg i32* %0, i32 %71, i32 42 seq_cst seq_cst
%73 = extractvalue { i32, i1 } %72, 1
br i1 %73, label %13, label %10
}