#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 volatile uint8_t;

/* Variables and functions */
int /*<<< orphan*/ memset(void *, int volatile, size_t);
int XMemBankTest(size_t *xramsize) {
  volatile uint8_t *breg = (uint8_t *)((size_t)-1 & ~0xFF);
  volatile uint8_t *bmem = 0;
  size_t bsize = 16384;
  uint8_t *bend = (uint8_t *)bmem + bsize;
  uint8_t *xramend = (uint8_t *)(*xramsize + 0x1100 + 1);
  volatile uint8_t *cp;
  uint8_t i;
  uint8_t j;
  *(breg + 1) = 1;
  for (cp = (uint8_t *)(0x1100 + 1); cp < xramend; cp += 256) {
    *cp = 1;
  }
  *breg = 0;
  for (cp = (uint8_t *)(0x1100 + 1); cp < xramend; cp += 256) {
    *cp = 0;
  }
  *(breg + 1) = 1;
  for (cp = (uint8_t *)(0x1100 + 1); cp < xramend; cp += 256) {
    if (*cp == 1) {
      bmem = cp;
      break;
    }
  }
  if (bmem == 0) {
    return 0;
  }
  *xramsize = xramend - bmem;
  for (i = 1; i; i++) {
    *(breg + i) = i;
    memset((void *)bmem, i, bsize);
    for (cp = bmem; cp < bend; cp++) {
      if (*cp != i) {
        break;
      }
    }
    if (cp < bend) {
      break;
    }
    for (cp = (uint8_t *)(0x1100 + 1); cp < bmem; cp += 256) {
      if (*cp) {
        break;
      }
    }
    if (cp < bmem) {
      break;
    }
    for (j = 0; j < i; j++) {
      *(breg + j) = j;
      for (cp = bmem; cp < bend; cp++) {
        if (*cp != j) {
          break;
        }
      }
      if (cp < bend) {
        break;
      }
    }
    if (j < i) {
      break;
    }
  }
  return i;
}


x86 assembly (clang, -O0):
<XMemBankTest>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    $0xffffffffffffff00,%rax
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x20(%rbp)
movq   $0x4000,-0x28(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
add    $0x1100,%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movl   $0x1,0x4(%rax)
mov    $0x1101,%eax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x38(%rbp),%rax
jae    119e <XMemBankTest+0x8e>
mov    -0x40(%rbp),%rax
movl   $0x1,(%rax)
mov    -0x40(%rbp),%rax
add    $0x400,%rax
mov    %rax,-0x40(%rbp)
jmp    1173 <XMemBankTest+0x63>
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    $0x1101,%eax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x38(%rbp),%rax
jae    11dc <XMemBankTest+0xcc>
mov    -0x40(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x40(%rbp),%rax
add    $0x400,%rax
mov    %rax,-0x40(%rbp)
jmp    11b1 <XMemBankTest+0xa1>
mov    -0x18(%rbp),%rax
movl   $0x1,0x4(%rax)
mov    $0x1101,%eax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x38(%rbp),%rax
jae    1232 <XMemBankTest+0x122>
mov    -0x40(%rbp),%rax
mov    (%rax),%eax
cmp    $0x1,%eax
jne    121a <XMemBankTest+0x10a>
mov    -0x40(%rbp),%rax
mov    %rax,-0x20(%rbp)
jmp    1232 <XMemBankTest+0x122>
jmp    121f <XMemBankTest+0x10f>
mov    -0x40(%rbp),%rax
add    $0x400,%rax
mov    %rax,-0x40(%rbp)
jmp    11f0 <XMemBankTest+0xe0>
cmpq   $0x0,-0x20(%rbp)
jne    1249 <XMemBankTest+0x139>
movl   $0x0,-0x4(%rbp)
jmp    13f6 <XMemBankTest+0x2e6>
mov    -0x38(%rbp),%rcx
mov    -0x20(%rbp),%rax
sub    %rax,%rcx
sar    $0x2,%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x1,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    $0x0,%eax
je     13f0 <XMemBankTest+0x2e0>
mov    -0x44(%rbp),%edx
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rdi
mov    -0x44(%rbp),%esi
mov    -0x28(%rbp),%rdx
call   1030 <memset@plt>
mov    -0x20(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    12d4 <XMemBankTest+0x1c4>
mov    -0x40(%rbp),%rax
mov    (%rax),%eax
mov    -0x44(%rbp),%ecx
cmp    %ecx,%eax
je     12be <XMemBankTest+0x1ae>
jmp    12d4 <XMemBankTest+0x1c4>
jmp    12c3 <XMemBankTest+0x1b3>
mov    -0x40(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x40(%rbp)
jmp    129a <XMemBankTest+0x18a>
mov    -0x40(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    12e7 <XMemBankTest+0x1d7>
jmp    13f0 <XMemBankTest+0x2e0>
mov    $0x1101,%eax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    132a <XMemBankTest+0x21a>
mov    -0x40(%rbp),%rax
mov    (%rax),%eax
cmp    $0x0,%eax
je     1312 <XMemBankTest+0x202>
jmp    132a <XMemBankTest+0x21a>
jmp    1317 <XMemBankTest+0x207>
mov    -0x40(%rbp),%rax
add    $0x400,%rax
mov    %rax,-0x40(%rbp)
jmp    12f0 <XMemBankTest+0x1e0>
mov    -0x40(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    133d <XMemBankTest+0x22d>
jmp    13f0 <XMemBankTest+0x2e0>
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    -0x44(%rbp),%ecx
cmp    %ecx,%eax
jge    13ca <XMemBankTest+0x2ba>
mov    -0x48(%rbp),%edx
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    13a4 <XMemBankTest+0x294>
mov    -0x40(%rbp),%rax
mov    (%rax),%eax
mov    -0x48(%rbp),%ecx
cmp    %ecx,%eax
je     138e <XMemBankTest+0x27e>
jmp    13a4 <XMemBankTest+0x294>
jmp    1393 <XMemBankTest+0x283>
mov    -0x40(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x40(%rbp)
jmp    136a <XMemBankTest+0x25a>
mov    -0x40(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    13b7 <XMemBankTest+0x2a7>
jmp    13ca <XMemBankTest+0x2ba>
jmp    13bc <XMemBankTest+0x2ac>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1344 <XMemBankTest+0x234>
mov    -0x48(%rbp),%eax
mov    -0x44(%rbp),%ecx
cmp    %ecx,%eax
jge    13dd <XMemBankTest+0x2cd>
jmp    13f0 <XMemBankTest+0x2e0>
jmp    13e2 <XMemBankTest+0x2d2>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1266 <XMemBankTest+0x156>
mov    -0x44(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<XMemBankTest>:
push   %r14
push   %rbx
push   %rax
mov    (%rdi),%rcx
lea    0x1101(%rcx),%rdx
movl   $0x1,0xffffffffffffff04
cmp    $0x1102,%rdx
jb     11bc <XMemBankTest+0xac>
mov    $0x1101,%eax
nopl   0x0(%rax,%rax,1)
movl   $0x1,(%rax)
add    $0x400,%rax
cmp    %rdx,%rax
jb     1140 <XMemBankTest+0x30>
movl   $0x0,0xffffffffffffff00
cmp    $0x1102,%rdx
jb     11c7 <XMemBankTest+0xb7>
mov    $0x1101,%eax
nopw   0x0(%rax,%rax,1)
movl   $0x0,(%rax)
add    $0x400,%rax
cmp    %rdx,%rax
jb     1170 <XMemBankTest+0x60>
xor    %eax,%eax
movl   $0x1,0xffffffffffffff04
cmp    $0x1102,%rdx
jb     11d4 <XMemBankTest+0xc4>
mov    $0x1101,%ebx
nopl   0x0(%rax)
mov    (%rbx),%esi
cmp    $0x1,%esi
je     11dc <XMemBankTest+0xcc>
add    $0x400,%rbx
add    $0xfffffffffffffc00,%rcx
cmp    %rdx,%rbx
jb     11a0 <XMemBankTest+0x90>
jmp    11d4 <XMemBankTest+0xc4>
movl   $0x0,0xffffffffffffff00
movl   $0x1,0xffffffffffffff04
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret
sar    $0x2,%rcx
mov    %rcx,(%rdi)
movl   $0x1,(%rsp)
cmpl   $0x0,(%rsp)
je     12dd <XMemBankTest+0x1cd>
mov    $0xffffffffffffff00,%r14
mov    (%rsp),%eax
movslq (%rsp),%rcx
mov    %eax,(%r14,%rcx,4)
mov    (%rsp),%esi
mov    $0x4000,%edx
mov    %rbx,%rdi
call   1030 <memset@plt>
mov    %rbx,%rax
cmp    $0xffff,%rbx
ja     1247 <XMemBankTest+0x137>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    (%rax),%ecx
cmp    (%rsp),%ecx
jne    12dd <XMemBankTest+0x1cd>
add    $0x4,%rax
cmp    $0x10000,%rax
jb     1230 <XMemBankTest+0x120>
cmp    $0x1102,%rbx
jb     1270 <XMemBankTest+0x160>
mov    $0x1101,%eax
cs nopw 0x0(%rax,%rax,1)
nop
cmpl   $0x0,(%rax)
jne    12dd <XMemBankTest+0x1cd>
add    $0x400,%rax
cmp    %rbx,%rax
jb     1260 <XMemBankTest+0x150>
movl   $0x0,0x4(%rsp)
jmp    127f <XMemBankTest+0x16f>
addl   $0x1,0x4(%rsp)
mov    0x4(%rsp),%eax
cmp    (%rsp),%eax
jge    12c6 <XMemBankTest+0x1b6>
mov    0x4(%rsp),%eax
movslq 0x4(%rsp),%rcx
mov    %eax,(%r14,%rcx,4)
mov    %rbx,%rax
cmp    $0xffff,%rbx
ja     127a <XMemBankTest+0x16a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    (%rax),%ecx
cmp    0x4(%rsp),%ecx
jne    12c6 <XMemBankTest+0x1b6>
add    $0x4,%rax
cmp    $0xffff,%rax
jbe    12b0 <XMemBankTest+0x1a0>
jmp    127a <XMemBankTest+0x16a>
mov    0x4(%rsp),%eax
cmp    (%rsp),%eax
jl     12dd <XMemBankTest+0x1cd>
addl   $0x1,(%rsp)
cmpl   $0x0,(%rsp)
jne    11fb <XMemBankTest+0xeb>
mov    (%rsp),%eax
jmp    11d4 <XMemBankTest+0xc4>

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

LLVM IR (-O2):
define i32 @XMemBankTest(i64* nocapture %0) {
%2 = alloca i32
%3 = alloca i32
%4 = load i64, i64* %0
%5 = add i64 %4, 4353
%6 = inttoptr i64 %5 to i32*
%7 = bitcast i32* %2 to i8*
%8 = bitcast i32* %3 to i8*
store volatile i32 1, i32* inttoptr (i64 -252 to i32*)
%9 = icmp ugt i32* %6, inttoptr (i64 4353 to i32*)
br i1 %9, label %11, label %10
10: ; preds = %1
store volatile i32 0, i32* inttoptr (i64 -256 to i32*)
br label %20
11: ; preds = %1, %11
%12 = phi i32* [ %13, %11 ], [ inttoptr (i64 4353 to i32*), %1 ]
store volatile i32 1, i32* %12
%13 = getelementptr inbounds i32, i32* %12, i64 256
%14 = icmp ult i32* %13, %6
br i1 %14, label %11, label %15
15: ; preds = %11
store volatile i32 0, i32* inttoptr (i64 -256 to i32*)
br i1 %9, label %16, label %20
16: ; preds = %15, %16
%17 = phi i32* [ %18, %16 ], [ inttoptr (i64 4353 to i32*), %15 ]
store volatile i32 0, i32* %17
%18 = getelementptr inbounds i32, i32* %17, i64 256
%19 = icmp ult i32* %18, %6
br i1 %19, label %16, label %21
20: ; preds = %10, %15
store volatile i32 1, i32* inttoptr (i64 -252 to i32*)
br label %96
21: ; preds = %16
store volatile i32 1, i32* inttoptr (i64 -252 to i32*)
br i1 %9, label %22, label %96
22: ; preds = %21, %26
%23 = phi i32* [ %27, %26 ], [ inttoptr (i64 4353 to i32*), %21 ]
%24 = load volatile i32, i32* %23
%25 = icmp eq i32 %24, 1
br i1 %25, label %29, label %26
26: ; preds = %22
%27 = getelementptr inbounds i32, i32* %23, i64 256
%28 = icmp ult i32* %27, %6
br i1 %28, label %22, label %96
29: ; preds = %22
%30 = ptrtoint i32* %23 to i64
%31 = sub i64 %5, %30
%32 = ashr exact i64 %31, 2
store i64 %32, i64* %0
store volatile i32 1, i32* %2
%33 = load volatile i32, i32* %2
%34 = icmp eq i32 %33, 0
br i1 %34, label %94, label %35
35: ; preds = %29
%36 = bitcast i32* %23 to i8*
%37 = icmp ult i32* %23, inttoptr (i64 65536 to i32*)
%38 = icmp ugt i32* %23, inttoptr (i64 4353 to i32*)
br label %39
39: ; preds = %35, %89
%40 = load volatile i32, i32* %2
%41 = load volatile i32, i32* %2
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds i32, i32* inttoptr (i64 -256 to i32*), i64 %42
store volatile i32 %40, i32* %43
%44 = load volatile i32, i32* %2
%45 = tail call i32 @memset(i8* %36, i32 %44, i64 16384)
br i1 %37, label %49, label %48
46: ; preds = %49
%47 = icmp ult i32* %54, inttoptr (i64 65536 to i32*)
br i1 %47, label %49, label %48
48: ; preds = %46, %39
br i1 %38, label %57, label %62
49: ; preds = %39, %46
%50 = phi i32* [ %54, %46 ], [ %23, %39 ]
%51 = load volatile i32, i32* %50
%52 = load volatile i32, i32* %2
%53 = icmp eq i32 %51, %52
%54 = getelementptr inbounds i32, i32* %50, i64 1
br i1 %53, label %46, label %94
55: ; preds = %57
%56 = icmp ult i32* %61, %23
br i1 %56, label %57, label %62
57: ; preds = %48, %55
%58 = phi i32* [ %61, %55 ], [ inttoptr (i64 4353 to i32*), %48 ]
%59 = load volatile i32, i32* %58
%60 = icmp eq i32 %59, 0
%61 = getelementptr inbounds i32, i32* %58, i64 256
br i1 %60, label %55, label %94
62: ; preds = %55, %48
store volatile i32 0, i32* %3
%63 = load volatile i32, i32* %3
%64 = load volatile i32, i32* %2
%65 = icmp slt i32 %63, %64
br i1 %65, label %66, label %85
66: ; preds = %62, %79
%67 = load volatile i32, i32* %3
%68 = load volatile i32, i32* %3
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds i32, i32* inttoptr (i64 -256 to i32*), i64 %69
store volatile i32 %67, i32* %70
br i1 %37, label %73, label %79
71: ; preds = %73
%72 = icmp ult i32* %78, inttoptr (i64 65536 to i32*)
br i1 %72, label %73, label %79
73: ; preds = %66, %71
%74 = phi i32* [ %78, %71 ], [ %23, %66 ]
%75 = load volatile i32, i32* %74
%76 = load volatile i32, i32* %3
%77 = icmp eq i32 %75, %76
%78 = getelementptr inbounds i32, i32* %74, i64 1
br i1 %77, label %71, label %85
79: ; preds = %71, %66
%80 = load volatile i32, i32* %3
%81 = add nsw i32 %80, 1
store volatile i32 %81, i32* %3
%82 = load volatile i32, i32* %3
%83 = load volatile i32, i32* %2
%84 = icmp slt i32 %82, %83
br i1 %84, label %66, label %85
85: ; preds = %79, %73, %62
%86 = load volatile i32, i32* %3
%87 = load volatile i32, i32* %2
%88 = icmp slt i32 %86, %87
br i1 %88, label %94, label %89
89: ; preds = %85
%90 = load volatile i32, i32* %2
%91 = add nsw i32 %90, 1
store volatile i32 %91, i32* %2
%92 = load volatile i32, i32* %2
%93 = icmp eq i32 %92, 0
br i1 %93, label %94, label %39
94: ; preds = %89, %85, %49, %57, %29
%95 = load volatile i32, i32* %2
br label %96
96: ; preds = %26, %20, %21, %94
%97 = phi i32 [ %95, %94 ], [ 0, %21 ], [ 0, %20 ], [ 0, %26 ]
ret i32 %97
}