int test8_struct(char a0, char a1, char a2, char a3, char a4, char a5, char a6,
                 char a7, char a8, char a9, char a10, char a11, char a12,
                 char a13, char a14, char a15, char a16, char a17, char a18,
                 char a19, char a20, char a21, char a22, char a23) {
  if (a0 != 1)
    return 1;
  if (a1 != 2)
    return 1;
  if (a2 != 3)
    return 1;
  if (a3 != 4)
    return 1;
  if (a4 != 5)
    return 1;
  if (a5 != 6)
    return 1;
  if (a6 != 7)
    return 1;
  if (a7 != 8)
    return 1;
  if (a8 != 11)
    return 1;
  if (a9 != 12)
    return 1;
  if (a10 != 13)
    return 1;
  if (a11 != 14)
    return 1;
  if (a12 != 15)
    return 1;
  if (a13 != 16)
    return 1;
  if (a14 != 17)
    return 1;
  if (a15 != 18)
    return 1;
  if (a16 != 22)
    return 1;
  if (a17 != 23)
    return 1;
  if (a18 != 24)
    return 1;
  if (a19 != 25)
    return 1;
  if (a20 != 26)
    return 1;
  if (a21 != 27)
    return 1;
  if (a22 != 28)
    return 1;
  if (a23 != 29)
    return 1;
  return 0;
}


x86 assembly (clang, -O0):
<test8_struct>:
push   %rbp
mov    %rsp,%rbp
mov    %r8d,-0x1c(%rbp)
mov    %ecx,%eax
mov    -0x1c(%rbp),%ecx
mov    %eax,-0x18(%rbp)
mov    %edx,%eax
mov    -0x18(%rbp),%edx
mov    %eax,-0x14(%rbp)
mov    %esi,%eax
mov    -0x14(%rbp),%esi
mov    %eax,-0x10(%rbp)
mov    %edi,%r8d
mov    -0x10(%rbp),%edi
mov    %r9b,%al
mov    0x98(%rbp),%r9b
mov    0x90(%rbp),%r9b
mov    0x88(%rbp),%r9b
mov    0x80(%rbp),%r9b
mov    0x78(%rbp),%r9b
mov    0x70(%rbp),%r9b
mov    0x68(%rbp),%r9b
mov    0x60(%rbp),%r9b
mov    0x58(%rbp),%r9b
mov    0x50(%rbp),%r9b
mov    0x48(%rbp),%r9b
mov    0x40(%rbp),%r9b
mov    0x38(%rbp),%r9b
mov    0x30(%rbp),%r9b
mov    0x28(%rbp),%r9b
mov    0x20(%rbp),%r9b
mov    0x18(%rbp),%r9b
mov    0x10(%rbp),%r9b
mov    %r8b,-0x5(%rbp)
mov    %dil,-0x6(%rbp)
mov    %sil,-0x7(%rbp)
mov    %dl,-0x8(%rbp)
mov    %cl,-0x9(%rbp)
mov    %al,-0xa(%rbp)
movsbl -0x5(%rbp),%eax
cmp    $0x1,%eax
je     11ab <test8_struct+0xab>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl -0x6(%rbp),%eax
cmp    $0x2,%eax
je     11c4 <test8_struct+0xc4>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl -0x7(%rbp),%eax
cmp    $0x3,%eax
je     11dd <test8_struct+0xdd>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl -0x8(%rbp),%eax
cmp    $0x4,%eax
je     11f6 <test8_struct+0xf6>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl -0x9(%rbp),%eax
cmp    $0x5,%eax
je     120f <test8_struct+0x10f>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl -0xa(%rbp),%eax
cmp    $0x6,%eax
je     1228 <test8_struct+0x128>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x10(%rbp),%eax
cmp    $0x7,%eax
je     1241 <test8_struct+0x141>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x18(%rbp),%eax
cmp    $0x8,%eax
je     125a <test8_struct+0x15a>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x20(%rbp),%eax
cmp    $0xb,%eax
je     1273 <test8_struct+0x173>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x28(%rbp),%eax
cmp    $0xc,%eax
je     128c <test8_struct+0x18c>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x30(%rbp),%eax
cmp    $0xd,%eax
je     12a5 <test8_struct+0x1a5>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x38(%rbp),%eax
cmp    $0xe,%eax
je     12be <test8_struct+0x1be>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x40(%rbp),%eax
cmp    $0xf,%eax
je     12d7 <test8_struct+0x1d7>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x48(%rbp),%eax
cmp    $0x10,%eax
je     12f0 <test8_struct+0x1f0>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x50(%rbp),%eax
cmp    $0x11,%eax
je     1309 <test8_struct+0x209>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x58(%rbp),%eax
cmp    $0x12,%eax
je     1322 <test8_struct+0x222>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x60(%rbp),%eax
cmp    $0x16,%eax
je     133b <test8_struct+0x23b>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x68(%rbp),%eax
cmp    $0x17,%eax
je     1354 <test8_struct+0x254>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x70(%rbp),%eax
cmp    $0x18,%eax
je     136d <test8_struct+0x26d>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x78(%rbp),%eax
cmp    $0x19,%eax
je     1386 <test8_struct+0x286>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x80(%rbp),%eax
cmp    $0x1a,%eax
je     13a2 <test8_struct+0x2a2>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x88(%rbp),%eax
cmp    $0x1b,%eax
je     13be <test8_struct+0x2be>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x90(%rbp),%eax
cmp    $0x1c,%eax
je     13da <test8_struct+0x2da>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movsbl 0x98(%rbp),%eax
cmp    $0x1d,%eax
je     13f6 <test8_struct+0x2f6>
movl   $0x1,-0x4(%rbp)
jmp    13fd <test8_struct+0x2fd>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<test8_struct>:
push   %rbx
mov    0x30(%rsp),%r10b
mov    0x20(%rsp),%bl
mov    0x18(%rsp),%r11b
xor    $0x8,%r11b
xor    $0xb,%bl
or     %r11b,%bl
mov    0x10(%rsp),%al
xor    $0x1,%dil
xor    $0x2,%sil
or     %dil,%sil
xor    $0x3,%dl
xor    $0x4,%cl
or     %dl,%cl
or     %sil,%cl
xor    $0x5,%r8b
xor    $0x6,%r9b
or     %r8b,%r9b
or     %cl,%r9b
xor    $0x7,%al
or     %r9b,%al
or     %al,%bl
mov    0x28(%rsp),%al
xor    $0xc,%al
xor    $0xd,%r10b
or     %al,%r10b
mov    0x38(%rsp),%al
xor    $0xe,%al
or     %r10b,%al
mov    0x48(%rsp),%cl
or     %bl,%al
mov    0x40(%rsp),%dl
xor    $0xf,%dl
xor    $0x10,%cl
or     %dl,%cl
mov    0x50(%rsp),%dl
xor    $0x11,%dl
or     %cl,%dl
mov    0x58(%rsp),%cl
xor    $0x12,%cl
or     %dl,%cl
mov    0x68(%rsp),%dl
or     %al,%cl
mov    0x60(%rsp),%al
xor    $0x16,%al
xor    $0x17,%dl
or     %al,%dl
mov    0x70(%rsp),%al
xor    $0x18,%al
or     %dl,%al
mov    0x78(%rsp),%dl
xor    $0x19,%dl
or     %al,%dl
mov    0x80(%rsp),%al
xor    $0x1a,%al
or     %dl,%al
mov    0x90(%rsp),%dl
or     %cl,%al
mov    0x88(%rsp),%cl
xor    $0x1b,%cl
xor    $0x1c,%dl
or     %cl,%dl
or     %al,%dl
mov    0x98(%rsp),%cl
xor    $0x1d,%cl
xor    %eax,%eax
or     %dl,%cl
setne  %al
pop    %rbx
ret

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

LLVM IR (-O2):
define i32 @test8_struct(i8 signext %0, i8 signext %1, i8 signext %2, i8 signext %3, i8 signext %4, i8 signext %5, i8 signext %6, i8 signext %7, i8 signext %8, i8 signext %9, i8 signext %10, i8 signext %11, i8 signext %12, i8 signext %13, i8 signext %14, i8 signext %15, i8 signext %16, i8 signext %17, i8 signext %18, i8 signext %19, i8 signext %20, i8 signext %21, i8 signext %22, i8 signext %23) {
%25 = icmp eq i8 %0, 1
%26 = icmp eq i8 %1, 2
%27 = and i1 %25, %26
%28 = icmp eq i8 %2, 3
%29 = and i1 %27, %28
%30 = icmp eq i8 %3, 4
%31 = and i1 %29, %30
%32 = icmp eq i8 %4, 5
%33 = and i1 %31, %32
%34 = icmp eq i8 %5, 6
%35 = and i1 %33, %34
%36 = icmp eq i8 %6, 7
%37 = and i1 %35, %36
%38 = icmp eq i8 %7, 8
%39 = and i1 %37, %38
%40 = icmp eq i8 %8, 11
%41 = and i1 %39, %40
%42 = icmp eq i8 %9, 12
%43 = and i1 %41, %42
%44 = icmp eq i8 %10, 13
%45 = and i1 %43, %44
%46 = icmp eq i8 %11, 14
%47 = and i1 %45, %46
%48 = icmp eq i8 %12, 15
%49 = and i1 %47, %48
%50 = icmp eq i8 %13, 16
%51 = and i1 %49, %50
%52 = icmp eq i8 %14, 17
%53 = and i1 %51, %52
%54 = icmp eq i8 %15, 18
%55 = and i1 %53, %54
%56 = icmp eq i8 %16, 22
%57 = and i1 %55, %56
%58 = icmp eq i8 %17, 23
%59 = and i1 %57, %58
%60 = icmp eq i8 %18, 24
%61 = and i1 %59, %60
%62 = icmp eq i8 %19, 25
%63 = and i1 %61, %62
%64 = icmp eq i8 %20, 26
%65 = and i1 %63, %64
%66 = icmp eq i8 %21, 27
%67 = and i1 %65, %66
%68 = icmp eq i8 %22, 28
%69 = and i1 %67, %68
%70 = icmp ne i8 %23, 29
%71 = xor i1 %69, true
%72 = or i1 %70, %71
%73 = zext i1 %72 to i32
ret i32 %73
}