#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 */
typedef int uint32_t;

/* Variables and functions */
int /*<<< orphan*/ ASSERT(int);
void AESConfigSet(uint32_t ui32Base, uint32_t ui32Config) {
  ASSERT(ui32Base == 0x44036000);
  ASSERT((ui32Config & 0x00000004) || (ui32Config & 0x00000000));
  ASSERT((ui32Config & 0x00000008) || (ui32Config & 0x00000010) ||
         (ui32Config & 0x00000018));
  ASSERT((ui32Config & 0x00000000) || (ui32Config & 0x00000020) ||
         (ui32Config & 0x00000040) || (ui32Config & 0x00000200) ||
         (ui32Config & 0x00000400) || (ui32Config & 0x00000800) ||
         (ui32Config & 0x00001000) || (ui32Config & 0x00001800) ||
         (ui32Config & 0x00002000) || (ui32Config & 0x20004000) ||
         (ui32Config & 0x00000040) || (ui32Config & 0x20008000) ||
         (ui32Config & 0x20010000) || (ui32Config & 0x20020040) ||
         (ui32Config & 0x20030040) || (ui32Config & 0x20040040));
  ASSERT(((ui32Config & 0x00000040) || (ui32Config & 0x20010000) ||
          (ui32Config & 0x20020040) || (ui32Config & 0x20030040) ||
          (ui32Config & 0x20040040)) &&
         ((ui32Config & 0x00000000) || (ui32Config & 0x00000080) ||
          (ui32Config & 0x00000100) || (ui32Config & 0x00000180)));
  ASSERT((ui32Config & 0x20040040) &&
         ((ui32Config & 0x00000000) || (ui32Config & 0x00080000) ||
          (ui32Config & 0x00100000) || (ui32Config & 0x00180000) ||
          (ui32Config & 0x00200000) || (ui32Config & 0x00280000) ||
          (ui32Config & 0x00300000) || (ui32Config & 0x00380000)) &&
         ((ui32Config & 0x00400000) || (ui32Config & 0x00800000) ||
          (ui32Config & 0x00c00000) || (ui32Config & 0x01000000) ||
          (ui32Config & 0x01400000) || (ui32Config & 0x01800000) ||
          (ui32Config & 0x01c00000)));
  if ((*((volatile uint32_t *)(ui32Base + 0x00000050))) & 0x20000000) {
    ui32Config |= 0x20000000;
  }
  (*((volatile uint32_t *)(ui32Base + 0x00000050))) = ui32Config;
}


x86 assembly (clang, -O0):
<AESConfigSet>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
cmpl   $0x44036000,-0x4(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%edi
call   1030 <ASSERT@plt>
mov    -0x8(%rbp),%ecx
and    $0x4,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0x9(%rbp)
jne    1155 <AESConfigSet+0x45>
mov    -0x8(%rbp),%eax
and    $0x0,%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x9(%rbp)
mov    -0x9(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <ASSERT@plt>
mov    -0x8(%rbp),%ecx
and    $0x8,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xa(%rbp)
jne    1199 <AESConfigSet+0x89>
mov    -0x8(%rbp),%ecx
and    $0x10,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xa(%rbp)
jne    1199 <AESConfigSet+0x89>
mov    -0x8(%rbp),%eax
and    $0x18,%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0xa(%rbp)
mov    -0xa(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <ASSERT@plt>
mov    -0x8(%rbp),%ecx
and    $0x0,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%ecx
and    $0x20,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%ecx
and    $0x40,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%ecx
and    $0x200,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%ecx
and    $0x400,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%ecx
and    $0x800,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%ecx
and    $0x1000,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%ecx
and    $0x1800,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%ecx
and    $0x2000,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%ecx
and    $0x20004000,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%ecx
and    $0x40,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%ecx
and    $0x20008000,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%ecx
and    $0x20010000,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%ecx
and    $0x20020040,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%ecx
and    $0x20030040,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xb(%rbp)
jne    1304 <AESConfigSet+0x1f4>
mov    -0x8(%rbp),%eax
and    $0x20040040,%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0xb(%rbp)
mov    -0xb(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <ASSERT@plt>
mov    -0x8(%rbp),%eax
and    $0x40,%eax
cmp    $0x0,%eax
jne    136a <AESConfigSet+0x25a>
mov    -0x8(%rbp),%eax
and    $0x20010000,%eax
cmp    $0x0,%eax
jne    136a <AESConfigSet+0x25a>
mov    -0x8(%rbp),%eax
and    $0x20020040,%eax
cmp    $0x0,%eax
jne    136a <AESConfigSet+0x25a>
mov    -0x8(%rbp),%eax
and    $0x20030040,%eax
cmp    $0x0,%eax
jne    136a <AESConfigSet+0x25a>
mov    -0x8(%rbp),%ecx
and    $0x20040040,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0xc(%rbp)
je     13c3 <AESConfigSet+0x2b3>
mov    -0x8(%rbp),%ecx
and    $0x0,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xd(%rbp)
jne    13bd <AESConfigSet+0x2ad>
mov    -0x8(%rbp),%ecx
and    $0x80,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xd(%rbp)
jne    13bd <AESConfigSet+0x2ad>
mov    -0x8(%rbp),%ecx
and    $0x100,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xd(%rbp)
jne    13bd <AESConfigSet+0x2ad>
mov    -0x8(%rbp),%eax
and    $0x180,%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0xd(%rbp)
mov    -0xd(%rbp),%al
mov    %al,-0xc(%rbp)
mov    -0xc(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <ASSERT@plt>
mov    -0x8(%rbp),%ecx
and    $0x20040040,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0xe(%rbp)
je     1514 <AESConfigSet+0x404>
mov    -0x8(%rbp),%eax
and    $0x0,%eax
cmp    $0x0,%eax
jne    1473 <AESConfigSet+0x363>
mov    -0x8(%rbp),%eax
and    $0x80000,%eax
cmp    $0x0,%eax
jne    1473 <AESConfigSet+0x363>
mov    -0x8(%rbp),%eax
and    $0x100000,%eax
cmp    $0x0,%eax
jne    1473 <AESConfigSet+0x363>
mov    -0x8(%rbp),%eax
and    $0x180000,%eax
cmp    $0x0,%eax
jne    1473 <AESConfigSet+0x363>
mov    -0x8(%rbp),%eax
and    $0x200000,%eax
cmp    $0x0,%eax
jne    1473 <AESConfigSet+0x363>
mov    -0x8(%rbp),%eax
and    $0x280000,%eax
cmp    $0x0,%eax
jne    1473 <AESConfigSet+0x363>
mov    -0x8(%rbp),%eax
and    $0x300000,%eax
cmp    $0x0,%eax
jne    1473 <AESConfigSet+0x363>
mov    -0x8(%rbp),%ecx
and    $0x380000,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0xe(%rbp)
je     1514 <AESConfigSet+0x404>
mov    -0x8(%rbp),%ecx
and    $0x400000,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xf(%rbp)
jne    150e <AESConfigSet+0x3fe>
mov    -0x8(%rbp),%ecx
and    $0x800000,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xf(%rbp)
jne    150e <AESConfigSet+0x3fe>
mov    -0x8(%rbp),%ecx
and    $0xc00000,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xf(%rbp)
jne    150e <AESConfigSet+0x3fe>
mov    -0x8(%rbp),%ecx
and    $0x1000000,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xf(%rbp)
jne    150e <AESConfigSet+0x3fe>
mov    -0x8(%rbp),%ecx
and    $0x1400000,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xf(%rbp)
jne    150e <AESConfigSet+0x3fe>
mov    -0x8(%rbp),%ecx
and    $0x1800000,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0xf(%rbp)
jne    150e <AESConfigSet+0x3fe>
mov    -0x8(%rbp),%eax
and    $0x1c00000,%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0xf(%rbp)
mov    -0xf(%rbp),%al
mov    %al,-0xe(%rbp)
mov    -0xe(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <ASSERT@plt>
mov    -0x4(%rbp),%eax
add    $0x50,%eax
cltq
mov    (%rax),%eax
and    $0x20000000,%eax
cmp    $0x0,%eax
je     1544 <AESConfigSet+0x434>
mov    -0x8(%rbp),%eax
or     $0x20000000,%eax
mov    %eax,-0x8(%rbp)
mov    -0x8(%rbp),%ecx
mov    -0x4(%rbp),%eax
add    $0x50,%eax
cltq
mov    %ecx,(%rax)
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<AESConfigSet>:
push   %rbp
push   %r14
push   %rbx
mov    %esi,%ebx
mov    %edi,%ebp
xor    %edi,%edi
cmp    $0x44036000,%ebp
sete   %dil
call   1030 <ASSERT@plt>
mov    %ebx,%edi
shr    $0x2,%edi
and    $0x1,%edi
call   1030 <ASSERT@plt>
xor    %edi,%edi
test   $0x18,%bl
setne  %dil
call   1030 <ASSERT@plt>
xor    %edi,%edi
test   $0x2007fe60,%ebx
setne  %dil
call   1030 <ASSERT@plt>
test   $0x20040040,%ebx
setne  %r14b
test   $0x20070040,%ebx
setne  %al
test   $0x180,%ebx
setne  %cl
and    %al,%cl
movzbl %cl,%edi
call   1030 <ASSERT@plt>
test   $0x380000,%ebx
setne  %al
test   $0x1c00000,%ebx
setne  %cl
and    %r14b,%al
and    %cl,%al
movzbl %al,%edi
call   1030 <ASSERT@plt>
movslq %ebp,%rax
mov    $0x20000000,%ecx
and    0x50(%rax),%ecx
or     %ebx,%ecx
mov    %ecx,0x50(%rax)
pop    %rbx
pop    %r14
pop    %rbp
ret

LLVM IR (-O0):
define void @AESConfigSet(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
store i32 %0, i32* %3
store i32 %1, i32* %4
%5 = load i32, i32* %3
%6 = icmp eq i32 %5, 1141071872
%7 = zext i1 %6 to i32
%8 = call i32 @ASSERT(i32 %7)
%9 = load i32, i32* %4
%10 = and i32 %9, 4
%11 = icmp ne i32 %10, 0
br i1 %11, label %16, label %12
12: ; preds = %2
%13 = load i32, i32* %4
%14 = and i32 %13, 0
%15 = icmp ne i32 %14, 0
br label %16
16: ; preds = %12, %2
%17 = phi i1 [ true, %2 ], [ %15, %12 ]
%18 = zext i1 %17 to i32
%19 = call i32 @ASSERT(i32 %18)
%20 = load i32, i32* %4
%21 = and i32 %20, 8
%22 = icmp ne i32 %21, 0
br i1 %22, label %31, label %23
23: ; preds = %16
%24 = load i32, i32* %4
%25 = and i32 %24, 16
%26 = icmp ne i32 %25, 0
br i1 %26, label %31, label %27
27: ; preds = %23
%28 = load i32, i32* %4
%29 = and i32 %28, 24
%30 = icmp ne i32 %29, 0
br label %31
31: ; preds = %27, %23, %16
%32 = phi i1 [ true, %23 ], [ true, %16 ], [ %30, %27 ]
%33 = zext i1 %32 to i32
%34 = call i32 @ASSERT(i32 %33)
%35 = load i32, i32* %4
%36 = and i32 %35, 0
%37 = icmp ne i32 %36, 0
br i1 %37, label %98, label %38
38: ; preds = %31
%39 = load i32, i32* %4
%40 = and i32 %39, 32
%41 = icmp ne i32 %40, 0
br i1 %41, label %98, label %42
42: ; preds = %38
%43 = load i32, i32* %4
%44 = and i32 %43, 64
%45 = icmp ne i32 %44, 0
br i1 %45, label %98, label %46
46: ; preds = %42
%47 = load i32, i32* %4
%48 = and i32 %47, 512
%49 = icmp ne i32 %48, 0
br i1 %49, label %98, label %50
50: ; preds = %46
%51 = load i32, i32* %4
%52 = and i32 %51, 1024
%53 = icmp ne i32 %52, 0
br i1 %53, label %98, label %54
54: ; preds = %50
%55 = load i32, i32* %4
%56 = and i32 %55, 2048
%57 = icmp ne i32 %56, 0
br i1 %57, label %98, label %58
58: ; preds = %54
%59 = load i32, i32* %4
%60 = and i32 %59, 4096
%61 = icmp ne i32 %60, 0
br i1 %61, label %98, label %62
62: ; preds = %58
%63 = load i32, i32* %4
%64 = and i32 %63, 6144
%65 = icmp ne i32 %64, 0
br i1 %65, label %98, label %66
66: ; preds = %62
%67 = load i32, i32* %4
%68 = and i32 %67, 8192
%69 = icmp ne i32 %68, 0
br i1 %69, label %98, label %70
70: ; preds = %66
%71 = load i32, i32* %4
%72 = and i32 %71, 536887296
%73 = icmp ne i32 %72, 0
br i1 %73, label %98, label %74
74: ; preds = %70
%75 = load i32, i32* %4
%76 = and i32 %75, 64
%77 = icmp ne i32 %76, 0
br i1 %77, label %98, label %78
78: ; preds = %74
%79 = load i32, i32* %4
%80 = and i32 %79, 536903680
%81 = icmp ne i32 %80, 0
br i1 %81, label %98, label %82
82: ; preds = %78
%83 = load i32, i32* %4
%84 = and i32 %83, 536936448
%85 = icmp ne i32 %84, 0
br i1 %85, label %98, label %86
86: ; preds = %82
%87 = load i32, i32* %4
%88 = and i32 %87, 537002048
%89 = icmp ne i32 %88, 0
br i1 %89, label %98, label %90
90: ; preds = %86
%91 = load i32, i32* %4
%92 = and i32 %91, 537067584
%93 = icmp ne i32 %92, 0
br i1 %93, label %98, label %94
94: ; preds = %90
%95 = load i32, i32* %4
%96 = and i32 %95, 537133120
%97 = icmp ne i32 %96, 0
br label %98
98: ; preds = %94, %90, %86, %82, %78, %74, %70, %66, %62, %58, %54, %50, %46, %42, %38, %31
%99 = phi i1 [ true, %90 ], [ true, %86 ], [ true, %82 ], [ true, %78 ], [ true, %74 ], [ true, %70 ], [ true, %66 ], [ true, %62 ], [ true, %58 ], [ true, %54 ], [ true, %50 ], [ true, %46 ], [ true, %42 ], [ true, %38 ], [ true, %31 ], [ %97, %94 ]
%100 = zext i1 %99 to i32
%101 = call i32 @ASSERT(i32 %100)
%102 = load i32, i32* %4
%103 = and i32 %102, 64
%104 = icmp ne i32 %103, 0
br i1 %104, label %121, label %105
105: ; preds = %98
%106 = load i32, i32* %4
%107 = and i32 %106, 536936448
%108 = icmp ne i32 %107, 0
br i1 %108, label %121, label %109
109: ; preds = %105
%110 = load i32, i32* %4
%111 = and i32 %110, 537002048
%112 = icmp ne i32 %111, 0
br i1 %112, label %121, label %113
113: ; preds = %109
%114 = load i32, i32* %4
%115 = and i32 %114, 537067584
%116 = icmp ne i32 %115, 0
br i1 %116, label %121, label %117
117: ; preds = %113
%118 = load i32, i32* %4
%119 = and i32 %118, 537133120
%120 = icmp ne i32 %119, 0
br i1 %120, label %121, label %139
121: ; preds = %117, %113, %109, %105, %98
%122 = load i32, i32* %4
%123 = and i32 %122, 0
%124 = icmp ne i32 %123, 0
br i1 %124, label %137, label %125
125: ; preds = %121
%126 = load i32, i32* %4
%127 = and i32 %126, 128
%128 = icmp ne i32 %127, 0
br i1 %128, label %137, label %129
129: ; preds = %125
%130 = load i32, i32* %4
%131 = and i32 %130, 256
%132 = icmp ne i32 %131, 0
br i1 %132, label %137, label %133
133: ; preds = %129
%134 = load i32, i32* %4
%135 = and i32 %134, 384
%136 = icmp ne i32 %135, 0
br label %137
137: ; preds = %133, %129, %125, %121
%138 = phi i1 [ true, %129 ], [ true, %125 ], [ true, %121 ], [ %136, %133 ]
br label %139
139: ; preds = %137, %117
%140 = phi i1 [ false, %117 ], [ %138, %137 ]
%141 = zext i1 %140 to i32
%142 = call i32 @ASSERT(i32 %141)
%143 = load i32, i32* %4
%144 = and i32 %143, 537133120
%145 = icmp ne i32 %144, 0
br i1 %145, label %146, label %208
146: ; preds = %139
%147 = load i32, i32* %4
%148 = and i32 %147, 0
%149 = icmp ne i32 %148, 0
br i1 %149, label %178, label %150
150: ; preds = %146
%151 = load i32, i32* %4
%152 = and i32 %151, 524288
%153 = icmp ne i32 %152, 0
br i1 %153, label %178, label %154
154: ; preds = %150
%155 = load i32, i32* %4
%156 = and i32 %155, 1048576
%157 = icmp ne i32 %156, 0
br i1 %157, label %178, label %158
158: ; preds = %154
%159 = load i32, i32* %4
%160 = and i32 %159, 1572864
%161 = icmp ne i32 %160, 0
br i1 %161, label %178, label %162
162: ; preds = %158
%163 = load i32, i32* %4
%164 = and i32 %163, 2097152
%165 = icmp ne i32 %164, 0
br i1 %165, label %178, label %166
166: ; preds = %162
%167 = load i32, i32* %4
%168 = and i32 %167, 2621440
%169 = icmp ne i32 %168, 0
br i1 %169, label %178, label %170
170: ; preds = %166
%171 = load i32, i32* %4
%172 = and i32 %171, 3145728
%173 = icmp ne i32 %172, 0
br i1 %173, label %178, label %174
174: ; preds = %170
%175 = load i32, i32* %4
%176 = and i32 %175, 3670016
%177 = icmp ne i32 %176, 0
br i1 %177, label %178, label %208
178: ; preds = %174, %170, %166, %162, %158, %154, %150, %146
%179 = load i32, i32* %4
%180 = and i32 %179, 4194304
%181 = icmp ne i32 %180, 0
br i1 %181, label %206, label %182
182: ; preds = %178
%183 = load i32, i32* %4
%184 = and i32 %183, 8388608
%185 = icmp ne i32 %184, 0
br i1 %185, label %206, label %186
186: ; preds = %182
%187 = load i32, i32* %4
%188 = and i32 %187, 12582912
%189 = icmp ne i32 %188, 0
br i1 %189, label %206, label %190
190: ; preds = %186
%191 = load i32, i32* %4
%192 = and i32 %191, 16777216
%193 = icmp ne i32 %192, 0
br i1 %193, label %206, label %194
194: ; preds = %190
%195 = load i32, i32* %4
%196 = and i32 %195, 20971520
%197 = icmp ne i32 %196, 0
br i1 %197, label %206, label %198
198: ; preds = %194
%199 = load i32, i32* %4
%200 = and i32 %199, 25165824
%201 = icmp ne i32 %200, 0
br i1 %201, label %206, label %202
202: ; preds = %198
%203 = load i32, i32* %4
%204 = and i32 %203, 29360128
%205 = icmp ne i32 %204, 0
br label %206
206: ; preds = %202, %198, %194, %190, %186, %182, %178
%207 = phi i1 [ true, %198 ], [ true, %194 ], [ true, %190 ], [ true, %186 ], [ true, %182 ], [ true, %178 ], [ %205, %202 ]
br label %208
208: ; preds = %206, %174, %139
%209 = phi i1 [ false, %174 ], [ false, %139 ], [ %207, %206 ]
%210 = zext i1 %209 to i32
%211 = call i32 @ASSERT(i32 %210)
%212 = load i32, i32* %3
%213 = add nsw i32 %212, 80
%214 = sext i32 %213 to i64
%215 = inttoptr i64 %214 to i32*
%216 = load volatile i32, i32* %215
%217 = and i32 %216, 536870912
%218 = icmp ne i32 %217, 0
br i1 %218, label %219, label %222
219: ; preds = %208
%220 = load i32, i32* %4
%221 = or i32 %220, 536870912
store i32 %221, i32* %4
br label %222
222: ; preds = %219, %208
%223 = load i32, i32* %4
%224 = load i32, i32* %3
%225 = add nsw i32 %224, 80
%226 = sext i32 %225 to i64
%227 = inttoptr i64 %226 to i32*
store volatile i32 %223, i32* %227
ret void
}

LLVM IR (-O2):
define void @AESConfigSet(i32 %0, i32 %1) {
%3 = icmp eq i32 %0, 1141071872
%4 = zext i1 %3 to i32
%5 = tail call i32 @ASSERT(i32 %4)
%6 = lshr i32 %1, 2
%7 = and i32 %6, 1
%8 = tail call i32 @ASSERT(i32 %7)
%9 = and i32 %1, 24
%10 = icmp ne i32 %9, 0
%11 = zext i1 %10 to i32
%12 = tail call i32 @ASSERT(i32 %11)
%13 = and i32 %1, 537133120
%14 = and i32 %1, 537394784
%15 = icmp ne i32 %14, 0
%16 = zext i1 %15 to i32
%17 = tail call i32 @ASSERT(i32 %16)
%18 = icmp ne i32 %13, 0
%19 = and i32 %1, 537329728
%20 = icmp ne i32 %19, 0
%21 = and i32 %1, 384
%22 = icmp ne i32 %21, 0
%23 = and i1 %20, %22
%24 = zext i1 %23 to i32
%25 = tail call i32 @ASSERT(i32 %24)
%26 = and i32 %1, 3670016
%27 = icmp ne i32 %26, 0
%28 = and i32 %1, 29360128
%29 = icmp ne i32 %28, 0
%30 = and i1 %18, %27
%31 = and i1 %30, %29
%32 = zext i1 %31 to i32
%33 = tail call i32 @ASSERT(i32 %32)
%34 = add nsw i32 %0, 80
%35 = sext i32 %34 to i64
%36 = inttoptr i64 %35 to i32*
%37 = load volatile i32, i32* %36
%38 = and i32 %37, 536870912
%39 = or i32 %38, %1
store volatile i32 %39, i32* %36
ret void
}