#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 */

/* Variables and functions */
long long LLONG_MAX;
scalar_t__ is_double_rettype(int);
long long calc_error(unsigned a[2], unsigned b[3], int shift, int rettype) {
  unsigned r0, r1, r2;
  int sign, carry;
  long long result;
  if (is_double_rettype(rettype)) {
    if ((a[0] & 0x7FF00000) == 0x7FF00000 ||
        (b[0] & 0x7FF00000) == 0x7FF00000) {
      if (((a[0] & 0x800FFFFF) || a[1]) && ((b[0] & 0x800FFFFF) || b[1]) &&
          (a[0] & 0x7FF00000) == 0x7FF00000 &&
          (b[0] & 0x7FF00000) == 0x7FF00000)
        return 0;
      if (!((a[0] & 0xFFFFF) || a[1]) && !((b[0] & 0xFFFFF) || b[1]) &&
          a[0] == b[0])
        return 0;
      return LLONG_MAX;
    }
  } else {
    if ((a[0] & 0x7F800000) == 0x7F800000 ||
        (b[0] & 0x7F800000) == 0x7F800000) {
      if ((a[0] & 0x807FFFFF) && (b[0] & 0x807FFFFF) &&
          (a[0] & 0x7F800000) == 0x7F800000 &&
          (b[0] & 0x7F800000) == 0x7F800000)
        return 0;
      if (!(a[0] & 0x7FFFFF) && !(b[0] & 0x7FFFFF) && a[0] == b[0])
        return 0;
      return LLONG_MAX;
    }
  }
  if ((a[0] ^ b[0]) & 0x80000000)
    return LLONG_MAX;
  if (is_double_rettype(rettype)) {
    r2 = -b[2];
    carry = (r2 == 0);
    r1 = a[1] + ~b[1] + carry;
    carry = (r1 < a[1] || (carry && r1 == a[1]));
    r0 = a[0] + ~b[0] + carry;
  } else {
    r2 = -b[1];
    carry = (r2 == 0);
    r1 = a[0] + ~b[0] + carry;
    carry = (r1 < a[0] || (carry && r1 == a[0]));
    r0 = ~0 + carry;
  }
  if (shift > 0) {
    if (shift > 32 * 3)
      return 0;
    while (shift >= 32) {
      r2 = r1;
      r1 = r0;
      r0 = -(r0 >> 31);
      shift -= 32;
    }
    if (shift > 0) {
      r2 = (r2 >> shift) | (r1 << (32 - shift));
      r1 = (r1 >> shift) | (r0 << (32 - shift));
      r0 = (r0 >> shift) | ((-(r0 >> 31)) << (32 - shift));
    }
  }
  if (r0 & 0x80000000) {
    sign = 1;
    r2 = ~r2;
    carry = (r2 == 0);
    r1 = 0 + ~r1 + carry;
    carry = (carry && (r2 == 0));
    r0 = 0 + ~r0 + carry;
  } else {
    sign = 0;
  }
  if (r0 >= (1LL << (31 - (12))))
    return LLONG_MAX;
  result = (r2 >> (32 - (12))) & ((1 << (12)) - 1);
  result |= r1 << (12);
  result |= (long long)r0 << (32 + (12));
  if (sign)
    result = -result;
  return result;
}


x86 assembly (clang, -O0):
<calc_error>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    %ecx,-0x20(%rbp)
mov    -0x20(%rbp),%edi
call   1030 <is_double_rettype@plt>
cmp    $0x0,%rax
je     125c <calc_error+0x14c>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
and    $0x7ff00000,%eax
cmp    $0x7ff00000,%eax
je     1164 <calc_error+0x54>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
and    $0x7ff00000,%eax
cmp    $0x7ff00000,%eax
jne    1257 <calc_error+0x147>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
and    $0x800fffff,%eax
cmp    $0x0,%eax
jne    1186 <calc_error+0x76>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x4(%rax)
je     11e1 <calc_error+0xd1>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
and    $0x800fffff,%eax
cmp    $0x0,%eax
jne    11a8 <calc_error+0x98>
mov    -0x18(%rbp),%rax
cmpl   $0x0,0x4(%rax)
je     11e1 <calc_error+0xd1>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
and    $0x7ff00000,%eax
cmp    $0x7ff00000,%eax
jne    11e1 <calc_error+0xd1>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
and    $0x7ff00000,%eax
cmp    $0x7ff00000,%eax
jne    11e1 <calc_error+0xd1>
movq   $0x0,-0x8(%rbp)
jmp    1649 <calc_error+0x539>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
and    $0xfffff,%eax
cmp    $0x0,%eax
jne    1244 <calc_error+0x134>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x4(%rax)
jne    1244 <calc_error+0x134>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
and    $0xfffff,%eax
cmp    $0x0,%eax
jne    1244 <calc_error+0x134>
mov    -0x18(%rbp),%rax
cmpl   $0x0,0x4(%rax)
jne    1244 <calc_error+0x134>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jne    1244 <calc_error+0x134>
movq   $0x0,-0x8(%rbp)
jmp    1649 <calc_error+0x539>
mov    0x2d9d(%rip),%rax
mov    (%rax),%rax
mov    %rax,-0x8(%rbp)
jmp    1649 <calc_error+0x539>
jmp    1348 <calc_error+0x238>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
and    $0x7f800000,%eax
cmp    $0x7f800000,%eax
je     1288 <calc_error+0x178>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
and    $0x7f800000,%eax
cmp    $0x7f800000,%eax
jne    1343 <calc_error+0x233>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
and    $0x807fffff,%eax
cmp    $0x0,%eax
je     12e9 <calc_error+0x1d9>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
and    $0x807fffff,%eax
cmp    $0x0,%eax
je     12e9 <calc_error+0x1d9>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
and    $0x7f800000,%eax
cmp    $0x7f800000,%eax
jne    12e9 <calc_error+0x1d9>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
and    $0x7f800000,%eax
cmp    $0x7f800000,%eax
jne    12e9 <calc_error+0x1d9>
movq   $0x0,-0x8(%rbp)
jmp    1649 <calc_error+0x539>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
and    $0x7fffff,%eax
cmp    $0x0,%eax
jne    1330 <calc_error+0x220>
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
and    $0x7fffff,%eax
cmp    $0x0,%eax
jne    1330 <calc_error+0x220>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    -0x18(%rbp),%rcx
cmp    (%rcx),%eax
jne    1330 <calc_error+0x220>
movq   $0x0,-0x8(%rbp)
jmp    1649 <calc_error+0x539>
mov    0x2cb1(%rip),%rax
mov    (%rax),%rax
mov    %rax,-0x8(%rbp)
jmp    1649 <calc_error+0x539>
jmp    1348 <calc_error+0x238>
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    -0x18(%rbp),%rcx
xor    (%rcx),%eax
and    $0x80000000,%eax
cmp    $0x0,%eax
je     1375 <calc_error+0x265>
mov    0x2c7f(%rip),%rax
mov    (%rax),%rax
mov    %rax,-0x8(%rbp)
jmp    1649 <calc_error+0x539>
mov    -0x20(%rbp),%edi
call   1030 <is_double_rettype@plt>
cmp    $0x0,%rax
je     141c <calc_error+0x30c>
mov    -0x18(%rbp),%rcx
xor    %eax,%eax
sub    0x8(%rcx),%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%eax
mov    -0x18(%rbp),%rcx
mov    0x4(%rcx),%ecx
xor    $0xffffffff,%ecx
add    %ecx,%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x1,%al
cmp    0x4(%rdx),%ecx
mov    %al,-0x41(%rbp)
jb     13f5 <calc_error+0x2e5>
xor    %eax,%eax
cmpl   $0x0,-0x34(%rbp)
mov    %al,-0x42(%rbp)
je     13ef <calc_error+0x2df>
mov    -0x28(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    0x4(%rcx),%eax
sete   %al
mov    %al,-0x42(%rbp)
mov    -0x42(%rbp),%al
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    -0x18(%rbp),%rcx
mov    (%rcx),%ecx
xor    $0xffffffff,%ecx
add    %ecx,%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x24(%rbp)
jmp    149c <calc_error+0x38c>
mov    -0x18(%rbp),%rcx
xor    %eax,%eax
sub    0x4(%rcx),%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    -0x18(%rbp),%rcx
mov    (%rcx),%ecx
xor    $0xffffffff,%ecx
add    %ecx,%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x1,%al
cmp    (%rdx),%ecx
mov    %al,-0x43(%rbp)
jb     1486 <calc_error+0x376>
xor    %eax,%eax
cmpl   $0x0,-0x34(%rbp)
mov    %al,-0x44(%rbp)
je     1480 <calc_error+0x370>
mov    -0x28(%rbp),%eax
mov    -0x10(%rbp),%rcx
cmp    (%rcx),%eax
sete   %al
mov    %al,-0x44(%rbp)
mov    -0x44(%rbp),%al
mov    %al,-0x43(%rbp)
mov    -0x43(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    155d <calc_error+0x44d>
cmpl   $0x60,-0x1c(%rbp)
jle    14bd <calc_error+0x3ad>
movq   $0x0,-0x8(%rbp)
jmp    1649 <calc_error+0x539>
jmp    14c2 <calc_error+0x3b2>
cmpl   $0x20,-0x1c(%rbp)
jl     14f3 <calc_error+0x3e3>
mov    -0x28(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x24(%rbp),%ecx
shr    $0x1f,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
sub    $0x20,%eax
mov    %eax,-0x1c(%rbp)
jmp    14c2 <calc_error+0x3b2>
cmpl   $0x0,-0x1c(%rbp)
jle    1558 <calc_error+0x448>
mov    -0x2c(%rbp),%eax
mov    -0x1c(%rbp),%ecx
shr    %cl,%eax
mov    -0x28(%rbp),%edx
mov    $0x20,%ecx
sub    -0x1c(%rbp),%ecx
shl    %cl,%edx
mov    %edx,%ecx
or     %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x1c(%rbp),%ecx
shr    %cl,%eax
mov    -0x24(%rbp),%edx
mov    $0x20,%ecx
sub    -0x1c(%rbp),%ecx
shl    %cl,%edx
mov    %edx,%ecx
or     %ecx,%eax
mov    %eax,-0x28(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x1c(%rbp),%ecx
shr    %cl,%eax
mov    -0x24(%rbp),%ecx
shr    $0x1f,%ecx
xor    %edx,%edx
sub    %ecx,%edx
mov    $0x20,%ecx
sub    -0x1c(%rbp),%ecx
shl    %cl,%edx
mov    %edx,%ecx
or     %ecx,%eax
mov    %eax,-0x24(%rbp)
jmp    155d <calc_error+0x44d>
mov    -0x24(%rbp),%eax
and    $0x80000000,%eax
cmp    $0x0,%eax
je     15d4 <calc_error+0x4c4>
movl   $0x1,-0x30(%rbp)
mov    -0x2c(%rbp),%eax
xor    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
mov    -0x28(%rbp),%eax
xor    $0xffffffff,%eax
add    $0x0,%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x28(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x34(%rbp)
mov    %al,-0x45(%rbp)
je     15b5 <calc_error+0x4a5>
cmpl   $0x0,-0x2c(%rbp)
sete   %al
mov    %al,-0x45(%rbp)
mov    -0x45(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
mov    -0x24(%rbp),%eax
xor    $0xffffffff,%eax
add    $0x0,%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x24(%rbp)
jmp    15db <calc_error+0x4cb>
movl   $0x0,-0x30(%rbp)
mov    -0x24(%rbp),%eax
cmp    $0x80000,%rax
jl     15fd <calc_error+0x4ed>
mov    0x29f7(%rip),%rax
mov    (%rax),%rax
mov    %rax,-0x8(%rbp)
jmp    1649 <calc_error+0x539>
mov    -0x2c(%rbp),%eax
shr    $0x14,%eax
and    $0xfff,%eax
mov    %eax,%eax
mov    %rax,-0x40(%rbp)
mov    -0x28(%rbp),%eax
shl    $0xc,%eax
mov    %eax,%eax
or     -0x40(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x24(%rbp),%eax
shl    $0x2c,%rax
or     -0x40(%rbp),%rax
mov    %rax,-0x40(%rbp)
cmpl   $0x0,-0x30(%rbp)
je     1641 <calc_error+0x531>
xor    %eax,%eax
sub    -0x40(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<calc_error>:
push   %rbp
push   %r15
push   %r14
push   %rbx
push   %rax
mov    %ecx,%ebp
mov    %edx,%r14d
mov    %rsi,%rbx
mov    %rdi,%r15
mov    %ecx,%edi
call   1030 <is_double_rettype@plt>
mov    (%r15),%ecx
test   %rax,%rax
je     11b8 <calc_error+0xa8>
mov    %ecx,%eax
and    $0x7ff00000,%eax
cmp    $0x7ff00000,%eax
je     1155 <calc_error+0x45>
mov    (%rbx),%edx
mov    %edx,%esi
not    %esi
test   $0x7ff00000,%esi
jne    1225 <calc_error+0x115>
test   $0x800fffff,%ecx
jne    1164 <calc_error+0x54>
cmpl   $0x0,0x4(%r15)
je     1189 <calc_error+0x79>
mov    (%rbx),%edx
test   $0x800fffff,%edx
jne    1174 <calc_error+0x64>
cmpl   $0x0,0x4(%rbx)
je     1189 <calc_error+0x79>
cmp    $0x7ff00000,%eax
jne    1189 <calc_error+0x79>
not    %edx
test   $0x7ff00000,%edx
je     12b6 <calc_error+0x1a6>
test   $0xfffff,%ecx
jne    133a <calc_error+0x22a>
cmpl   $0x0,0x4(%r15)
jne    133a <calc_error+0x22a>
mov    (%rbx),%eax
test   $0xfffff,%eax
jne    133a <calc_error+0x22a>
cmpl   $0x0,0x4(%rbx)
je     1218 <calc_error+0x108>
jmp    133a <calc_error+0x22a>
mov    %ecx,%eax
and    $0x7f800000,%eax
cmp    $0x7f800000,%eax
je     11d4 <calc_error+0xc4>
mov    (%rbx),%edx
mov    %edx,%esi
not    %esi
test   $0x7f800000,%esi
jne    1225 <calc_error+0x115>
test   $0x807fffff,%ecx
je     11ff <calc_error+0xef>
mov    (%rbx),%edx
test   $0x807fffff,%edx
je     11ff <calc_error+0xef>
cmp    $0x7f800000,%eax
jne    11ff <calc_error+0xef>
and    $0x7f800000,%edx
cmp    $0x7f800000,%edx
je     12b6 <calc_error+0x1a6>
test   $0x7fffff,%ecx
jne    133a <calc_error+0x22a>
mov    (%rbx),%eax
test   $0x7fffff,%eax
jne    133a <calc_error+0x22a>
cmp    %eax,%ecx
je     12b6 <calc_error+0x1a6>
jmp    133a <calc_error+0x22a>
xor    %ecx,%edx
js     133a <calc_error+0x22a>
mov    %ebp,%edi
call   1030 <is_double_rettype@plt>
test   %rax,%rax
je     1273 <calc_error+0x163>
mov    0x8(%rbx),%eax
xor    %ecx,%ecx
test   %eax,%eax
sete   %cl
mov    0x4(%r15),%edi
mov    (%rbx),%edx
mov    0x4(%rbx),%esi
not    %esi
add    %edi,%esi
add    %ecx,%esi
xor    %ecx,%ecx
xor    %ebp,%ebp
cmp    %edi,%esi
setb   %cl
sete   %bpl
test   %eax,%eax
cmovne %ecx,%ebp
or     %bpl,%cl
movzbl %cl,%ecx
not    %edx
add    (%r15),%edx
add    %ecx,%edx
jmp    12a5 <calc_error+0x195>
mov    (%rbx),%esi
mov    0x4(%rbx),%eax
xor    %ecx,%ecx
test   %eax,%eax
sete   %cl
mov    (%r15),%edx
not    %esi
add    %edx,%esi
add    %ecx,%esi
xor    %ecx,%ecx
xor    %edi,%edi
cmp    %edx,%esi
setae  %cl
setne  %dil
test   %eax,%eax
cmovne %ecx,%edi
cmp    %edx,%esi
cmovb  %ecx,%edi
movzbl %dil,%edx
neg    %edx
neg    %eax
test   %r14d,%r14d
jle    132c <calc_error+0x21c>
cmp    $0x60,%r14d
jbe    12bd <calc_error+0x1ad>
xor    %eax,%eax
jmp    1344 <calc_error+0x234>
cmp    $0x20,%r14d
jb     131b <calc_error+0x20b>
lea    -0x20(%r14),%ebp
mov    %ebp,%ecx
shr    $0x5,%ecx
add    $0x1,%ecx
and    $0x7,%ecx
je     12f5 <calc_error+0x1e5>
shl    $0x5,%ecx
xor    %ebx,%ebx
nopl   0x0(%rax)
mov    %edx,%edi
mov    %esi,%eax
sar    $0x1f,%edx
add    $0x20,%ebx
mov    %edi,%esi
cmp    %ebx,%ecx
jne    12e0 <calc_error+0x1d0>
sub    %ebx,%r14d
jmp    12f5 <calc_error+0x1e5>
cmp    $0xe0,%ebp
jb     1314 <calc_error+0x204>
mov    %edx,%eax
nop
sar    $0x1f,%eax
add    $0xffffff00,%r14d
mov    %eax,%edi
mov    %eax,%edx
cmp    $0x1f,%r14d
ja     1300 <calc_error+0x1f0>
mov    %edi,%esi
test   %r14d,%r14d
je     132c <calc_error+0x21c>
mov    %r14d,%ecx
shrd   %cl,%esi,%eax
shrd   %cl,%edx,%esi
mov    %edx,%edi
sar    $0x1f,%edi
shrd   %cl,%edi,%edx
test   %edx,%edx
js     134f <calc_error+0x23f>
mov    %edx,%ecx
cmp    $0x80000,%ecx
jb     136c <calc_error+0x25c>
mov    0x2ca7(%rip),%rax
mov    (%rax),%rax
add    $0x8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %edi,%edi
cmp    $0xffffffff,%eax
not    %eax
sete   %dil
not    %esi
add    %edi,%esi
mov    %edx,%ecx
not    %ecx
add    %edi,%ecx
cmp    $0x80000,%ecx
jae    133a <calc_error+0x22a>
shld   $0xc,%eax,%esi
shl    $0x2c,%rcx
or     %rsi,%rcx
mov    %rcx,%rax
neg    %rax
test   %edx,%edx
cmovns %rcx,%rax
jmp    1344 <calc_error+0x234>

LLVM IR (-O0):
@LLONG_MAX = global i64 0
define i64 @calc_error(i32* %0, i32* %1, i32 %2, i32 %3) {
%5 = alloca i64
%6 = alloca i32*
%7 = alloca i32*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i64
store i32* %0, i32** %6
store i32* %1, i32** %7
store i32 %2, i32* %8
store i32 %3, i32* %9
%16 = load i32, i32* %9
%17 = call i64 @is_double_rettype(i32 %16)
%18 = icmp ne i64 %17, 0
br i1 %18, label %19, label %100
19: ; preds = %4
%20 = load i32*, i32** %6
%21 = getelementptr inbounds i32, i32* %20, i64 0
%22 = load i32, i32* %21
%23 = and i32 %22, 2146435072
%24 = icmp eq i32 %23, 2146435072
br i1 %24, label %31, label %25
25: ; preds = %19
%26 = load i32*, i32** %7
%27 = getelementptr inbounds i32, i32* %26, i64 0
%28 = load i32, i32* %27
%29 = and i32 %28, 2146435072
%30 = icmp eq i32 %29, 2146435072
br i1 %30, label %31, label %99
31: ; preds = %25, %19
%32 = load i32*, i32** %6
%33 = getelementptr inbounds i32, i32* %32, i64 0
%34 = load i32, i32* %33
%35 = and i32 %34, -2146435073
%36 = icmp ne i32 %35, 0
br i1 %36, label %42, label %37
37: ; preds = %31
%38 = load i32*, i32** %6
%39 = getelementptr inbounds i32, i32* %38, i64 1
%40 = load i32, i32* %39
%41 = icmp ne i32 %40, 0
br i1 %41, label %42, label %66
42: ; preds = %37, %31
%43 = load i32*, i32** %7
%44 = getelementptr inbounds i32, i32* %43, i64 0
%45 = load i32, i32* %44
%46 = and i32 %45, -2146435073
%47 = icmp ne i32 %46, 0
br i1 %47, label %53, label %48
48: ; preds = %42
%49 = load i32*, i32** %7
%50 = getelementptr inbounds i32, i32* %49, i64 1
%51 = load i32, i32* %50
%52 = icmp ne i32 %51, 0
br i1 %52, label %53, label %66
53: ; preds = %48, %42
%54 = load i32*, i32** %6
%55 = getelementptr inbounds i32, i32* %54, i64 0
%56 = load i32, i32* %55
%57 = and i32 %56, 2146435072
%58 = icmp eq i32 %57, 2146435072
br i1 %58, label %59, label %66
59: ; preds = %53
%60 = load i32*, i32** %7
%61 = getelementptr inbounds i32, i32* %60, i64 0
%62 = load i32, i32* %61
%63 = and i32 %62, 2146435072
%64 = icmp eq i32 %63, 2146435072
br i1 %64, label %65, label %66
65: ; preds = %59
store i64 0, i64* %5
br label %370
66: ; preds = %59, %53, %48, %37
%67 = load i32*, i32** %6
%68 = getelementptr inbounds i32, i32* %67, i64 0
%69 = load i32, i32* %68
%70 = and i32 %69, 1048575
%71 = icmp ne i32 %70, 0
br i1 %71, label %97, label %72
72: ; preds = %66
%73 = load i32*, i32** %6
%74 = getelementptr inbounds i32, i32* %73, i64 1
%75 = load i32, i32* %74
%76 = icmp ne i32 %75, 0
br i1 %76, label %97, label %77
77: ; preds = %72
%78 = load i32*, i32** %7
%79 = getelementptr inbounds i32, i32* %78, i64 0
%80 = load i32, i32* %79
%81 = and i32 %80, 1048575
%82 = icmp ne i32 %81, 0
br i1 %82, label %97, label %83
83: ; preds = %77
%84 = load i32*, i32** %7
%85 = getelementptr inbounds i32, i32* %84, i64 1
%86 = load i32, i32* %85
%87 = icmp ne i32 %86, 0
br i1 %87, label %97, label %88
88: ; preds = %83
%89 = load i32*, i32** %6
%90 = getelementptr inbounds i32, i32* %89, i64 0
%91 = load i32, i32* %90
%92 = load i32*, i32** %7
%93 = getelementptr inbounds i32, i32* %92, i64 0
%94 = load i32, i32* %93
%95 = icmp eq i32 %91, %94
br i1 %95, label %96, label %97
96: ; preds = %88
store i64 0, i64* %5
br label %370
97: ; preds = %88, %83, %77, %72, %66
%98 = load i64, i64* @LLONG_MAX
store i64 %98, i64* %5
br label %370
99: ; preds = %25
br label %161
100: ; preds = %4
%101 = load i32*, i32** %6
%102 = getelementptr inbounds i32, i32* %101, i64 0
%103 = load i32, i32* %102
%104 = and i32 %103, 2139095040
%105 = icmp eq i32 %104, 2139095040
br i1 %105, label %112, label %106
106: ; preds = %100
%107 = load i32*, i32** %7
%108 = getelementptr inbounds i32, i32* %107, i64 0
%109 = load i32, i32* %108
%110 = and i32 %109, 2139095040
%111 = icmp eq i32 %110, 2139095040
br i1 %111, label %112, label %160
112: ; preds = %106, %100
%113 = load i32*, i32** %6
%114 = getelementptr inbounds i32, i32* %113, i64 0
%115 = load i32, i32* %114
%116 = and i32 %115, -2139095041
%117 = icmp ne i32 %116, 0
br i1 %117, label %118, label %137
118: ; preds = %112
%119 = load i32*, i32** %7
%120 = getelementptr inbounds i32, i32* %119, i64 0
%121 = load i32, i32* %120
%122 = and i32 %121, -2139095041
%123 = icmp ne i32 %122, 0
br i1 %123, label %124, label %137
124: ; preds = %118
%125 = load i32*, i32** %6
%126 = getelementptr inbounds i32, i32* %125, i64 0
%127 = load i32, i32* %126
%128 = and i32 %127, 2139095040
%129 = icmp eq i32 %128, 2139095040
br i1 %129, label %130, label %137
130: ; preds = %124
%131 = load i32*, i32** %7
%132 = getelementptr inbounds i32, i32* %131, i64 0
%133 = load i32, i32* %132
%134 = and i32 %133, 2139095040
%135 = icmp eq i32 %134, 2139095040
br i1 %135, label %136, label %137
136: ; preds = %130
store i64 0, i64* %5
br label %370
137: ; preds = %130, %124, %118, %112
%138 = load i32*, i32** %6
%139 = getelementptr inbounds i32, i32* %138, i64 0
%140 = load i32, i32* %139
%141 = and i32 %140, 8388607
%142 = icmp ne i32 %141, 0
br i1 %142, label %158, label %143
143: ; preds = %137
%144 = load i32*, i32** %7
%145 = getelementptr inbounds i32, i32* %144, i64 0
%146 = load i32, i32* %145
%147 = and i32 %146, 8388607
%148 = icmp ne i32 %147, 0
br i1 %148, label %158, label %149
149: ; preds = %143
%150 = load i32*, i32** %6
%151 = getelementptr inbounds i32, i32* %150, i64 0
%152 = load i32, i32* %151
%153 = load i32*, i32** %7
%154 = getelementptr inbounds i32, i32* %153, i64 0
%155 = load i32, i32* %154
%156 = icmp eq i32 %152, %155
br i1 %156, label %157, label %158
157: ; preds = %149
store i64 0, i64* %5
br label %370
158: ; preds = %149, %143, %137
%159 = load i64, i64* @LLONG_MAX
store i64 %159, i64* %5
br label %370
160: ; preds = %106
br label %161
161: ; preds = %160, %99
%162 = load i32*, i32** %6
%163 = getelementptr inbounds i32, i32* %162, i64 0
%164 = load i32, i32* %163
%165 = load i32*, i32** %7
%166 = getelementptr inbounds i32, i32* %165, i64 0
%167 = load i32, i32* %166
%168 = xor i32 %164, %167
%169 = and i32 %168, -2147483648
%170 = icmp ne i32 %169, 0
br i1 %170, label %171, label %173
171: ; preds = %161
%172 = load i64, i64* @LLONG_MAX
store i64 %172, i64* %5
br label %370
173: ; preds = %161
%174 = load i32, i32* %9
%175 = call i64 @is_double_rettype(i32 %174)
%176 = icmp ne i64 %175, 0
br i1 %176, label %177, label %224
177: ; preds = %173
%178 = load i32*, i32** %7
%179 = getelementptr inbounds i32, i32* %178, i64 2
%180 = load i32, i32* %179
%181 = sub i32 0, %180
store i32 %181, i32* %12
%182 = load i32, i32* %12
%183 = icmp eq i32 %182, 0
%184 = zext i1 %183 to i32
store i32 %184, i32* %14
%185 = load i32*, i32** %6
%186 = getelementptr inbounds i32, i32* %185, i64 1
%187 = load i32, i32* %186
%188 = load i32*, i32** %7
%189 = getelementptr inbounds i32, i32* %188, i64 1
%190 = load i32, i32* %189
%191 = xor i32 %190, -1
%192 = add i32 %187, %191
%193 = load i32, i32* %14
%194 = add i32 %192, %193
store i32 %194, i32* %11
%195 = load i32, i32* %11
%196 = load i32*, i32** %6
%197 = getelementptr inbounds i32, i32* %196, i64 1
%198 = load i32, i32* %197
%199 = icmp ult i32 %195, %198
br i1 %199, label %211, label %200
200: ; preds = %177
%201 = load i32, i32* %14
%202 = icmp ne i32 %201, 0
br i1 %202, label %203, label %209
203: ; preds = %200
%204 = load i32, i32* %11
%205 = load i32*, i32** %6
%206 = getelementptr inbounds i32, i32* %205, i64 1
%207 = load i32, i32* %206
%208 = icmp eq i32 %204, %207
br label %209
209: ; preds = %203, %200
%210 = phi i1 [ false, %200 ], [ %208, %203 ]
br label %211
211: ; preds = %209, %177
%212 = phi i1 [ true, %177 ], [ %210, %209 ]
%213 = zext i1 %212 to i32
store i32 %213, i32* %14
%214 = load i32*, i32** %6
%215 = getelementptr inbounds i32, i32* %214, i64 0
%216 = load i32, i32* %215
%217 = load i32*, i32** %7
%218 = getelementptr inbounds i32, i32* %217, i64 0
%219 = load i32, i32* %218
%220 = xor i32 %219, -1
%221 = add i32 %216, %220
%222 = load i32, i32* %14
%223 = add i32 %221, %222
store i32 %223, i32* %10
br label %263
224: ; preds = %173
%225 = load i32*, i32** %7
%226 = getelementptr inbounds i32, i32* %225, i64 1
%227 = load i32, i32* %226
%228 = sub i32 0, %227
store i32 %228, i32* %12
%229 = load i32, i32* %12
%230 = icmp eq i32 %229, 0
%231 = zext i1 %230 to i32
store i32 %231, i32* %14
%232 = load i32*, i32** %6
%233 = getelementptr inbounds i32, i32* %232, i64 0
%234 = load i32, i32* %233
%235 = load i32*, i32** %7
%236 = getelementptr inbounds i32, i32* %235, i64 0
%237 = load i32, i32* %236
%238 = xor i32 %237, -1
%239 = add i32 %234, %238
%240 = load i32, i32* %14
%241 = add i32 %239, %240
store i32 %241, i32* %11
%242 = load i32, i32* %11
%243 = load i32*, i32** %6
%244 = getelementptr inbounds i32, i32* %243, i64 0
%245 = load i32, i32* %244
%246 = icmp ult i32 %242, %245
br i1 %246, label %258, label %247
247: ; preds = %224
%248 = load i32, i32* %14
%249 = icmp ne i32 %248, 0
br i1 %249, label %250, label %256
250: ; preds = %247
%251 = load i32, i32* %11
%252 = load i32*, i32** %6
%253 = getelementptr inbounds i32, i32* %252, i64 0
%254 = load i32, i32* %253
%255 = icmp eq i32 %251, %254
br label %256
256: ; preds = %250, %247
%257 = phi i1 [ false, %247 ], [ %255, %250 ]
br label %258
258: ; preds = %256, %224
%259 = phi i1 [ true, %224 ], [ %257, %256 ]
%260 = zext i1 %259 to i32
store i32 %260, i32* %14
%261 = load i32, i32* %14
%262 = add nsw i32 -1, %261
store i32 %262, i32* %10
br label %263
263: ; preds = %258, %211
%264 = load i32, i32* %8
%265 = icmp sgt i32 %264, 0
br i1 %265, label %266, label %313
266: ; preds = %263
%267 = load i32, i32* %8
%268 = icmp sgt i32 %267, 96
br i1 %268, label %269, label %270
269: ; preds = %266
store i64 0, i64* %5
br label %370
270: ; preds = %266
br label %271
271: ; preds = %274, %270
%272 = load i32, i32* %8
%273 = icmp sge i32 %272, 32
br i1 %273, label %274, label %282
274: ; preds = %271
%275 = load i32, i32* %11
store i32 %275, i32* %12
%276 = load i32, i32* %10
store i32 %276, i32* %11
%277 = load i32, i32* %10
%278 = lshr i32 %277, 31
%279 = sub i32 0, %278
store i32 %279, i32* %10
%280 = load i32, i32* %8
%281 = sub nsw i32 %280, 32
store i32 %281, i32* %8
br label %271
282: ; preds = %271
%283 = load i32, i32* %8
%284 = icmp sgt i32 %283, 0
br i1 %284, label %285, label %312
285: ; preds = %282
%286 = load i32, i32* %12
%287 = load i32, i32* %8
%288 = lshr i32 %286, %287
%289 = load i32, i32* %11
%290 = load i32, i32* %8
%291 = sub nsw i32 32, %290
%292 = shl i32 %289, %291
%293 = or i32 %288, %292
store i32 %293, i32* %12
%294 = load i32, i32* %11
%295 = load i32, i32* %8
%296 = lshr i32 %294, %295
%297 = load i32, i32* %10
%298 = load i32, i32* %8
%299 = sub nsw i32 32, %298
%300 = shl i32 %297, %299
%301 = or i32 %296, %300
store i32 %301, i32* %11
%302 = load i32, i32* %10
%303 = load i32, i32* %8
%304 = lshr i32 %302, %303
%305 = load i32, i32* %10
%306 = lshr i32 %305, 31
%307 = sub i32 0, %306
%308 = load i32, i32* %8
%309 = sub nsw i32 32, %308
%310 = shl i32 %307, %309
%311 = or i32 %304, %310
store i32 %311, i32* %10
br label %312
312: ; preds = %285, %282
br label %313
313: ; preds = %312, %263
%314 = load i32, i32* %10
%315 = and i32 %314, -2147483648
%316 = icmp ne i32 %315, 0
br i1 %316, label %317, label %341
317: ; preds = %313
store i32 1, i32* %13
%318 = load i32, i32* %12
%319 = xor i32 %318, -1
store i32 %319, i32* %12
%320 = load i32, i32* %12
%321 = icmp eq i32 %320, 0
%322 = zext i1 %321 to i32
store i32 %322, i32* %14
%323 = load i32, i32* %11
%324 = xor i32 %323, -1
%325 = add i32 0, %324
%326 = load i32, i32* %14
%327 = add i32 %325, %326
store i32 %327, i32* %11
%328 = load i32, i32* %14
%329 = icmp ne i32 %328, 0
br i1 %329, label %330, label %333
330: ; preds = %317
%331 = load i32, i32* %12
%332 = icmp eq i32 %331, 0
br label %333
333: ; preds = %330, %317
%334 = phi i1 [ false, %317 ], [ %332, %330 ]
%335 = zext i1 %334 to i32
store i32 %335, i32* %14
%336 = load i32, i32* %10
%337 = xor i32 %336, -1
%338 = add i32 0, %337
%339 = load i32, i32* %14
%340 = add i32 %338, %339
store i32 %340, i32* %10
br label %342
341: ; preds = %313
store i32 0, i32* %13
br label %342
342: ; preds = %341, %333
%343 = load i32, i32* %10
%344 = zext i32 %343 to i64
%345 = icmp sge i64 %344, 524288
br i1 %345, label %346, label %348
346: ; preds = %342
%347 = load i64, i64* @LLONG_MAX
store i64 %347, i64* %5
br label %370
348: ; preds = %342
%349 = load i32, i32* %12
%350 = lshr i32 %349, 20
%351 = and i32 %350, 4095
%352 = zext i32 %351 to i64
store i64 %352, i64* %15
%353 = load i32, i32* %11
%354 = shl i32 %353, 12
%355 = zext i32 %354 to i64
%356 = load i64, i64* %15
%357 = or i64 %356, %355
store i64 %357, i64* %15
%358 = load i32, i32* %10
%359 = zext i32 %358 to i64
%360 = shl i64 %359, 44
%361 = load i64, i64* %15
%362 = or i64 %361, %360
store i64 %362, i64* %15
%363 = load i32, i32* %13
%364 = icmp ne i32 %363, 0
br i1 %364, label %365, label %368
365: ; preds = %348
%366 = load i64, i64* %15
%367 = sub nsw i64 0, %366
store i64 %367, i64* %15
br label %368
368: ; preds = %365, %348
%369 = load i64, i64* %15
store i64 %369, i64* %5
br label %370
370: ; preds = %368, %346, %269, %171, %158, %157, %136, %97, %96, %65
%371 = load i64, i64* %5
ret i64 %371
}

LLVM IR (-O2):
@LLONG_MAX = global i64 0
define i64 @calc_error(i32* nocapture %0, i32* nocapture %1, i32 %2, i32 %3) {
%5 = tail call i64 @is_double_rettype(i32 %3)
%6 = icmp eq i64 %5, 0
%7 = load i32, i32* %0
br i1 %6, label %55, label %8
8: ; preds = %4
%9 = and i32 %7, 2146435072
%10 = icmp eq i32 %9, 2146435072
br i1 %10, label %15, label %11
11: ; preds = %8
%12 = load i32, i32* %1
%13 = and i32 %12, 2146435072
%14 = icmp eq i32 %13, 2146435072
br i1 %14, label %15, label %84
15: ; preds = %11, %8
%16 = and i32 %7, -2146435073
%17 = icmp eq i32 %16, 0
br i1 %17, label %18, label %22
18: ; preds = %15
%19 = getelementptr inbounds i32, i32* %0, i64 1
%20 = load i32, i32* %19
%21 = icmp eq i32 %20, 0
br i1 %21, label %36, label %22
22: ; preds = %18, %15
%23 = load i32, i32* %1
%24 = and i32 %23, -2146435073
%25 = icmp eq i32 %24, 0
br i1 %25, label %26, label %32
26: ; preds = %22
%27 = getelementptr inbounds i32, i32* %1, i64 1
%28 = load i32, i32* %27
%29 = icmp eq i32 %28, 0
%30 = xor i1 %10, true
%31 = select i1 %29, i1 true, i1 %30
br i1 %31, label %36, label %33
32: ; preds = %22
br i1 %10, label %33, label %36
33: ; preds = %26, %32
%34 = and i32 %23, 2146435072
%35 = icmp eq i32 %34, 2146435072
br i1 %35, label %222, label %36
36: ; preds = %26, %33, %32, %18
%37 = and i32 %7, 1048575
%38 = icmp eq i32 %37, 0
br i1 %38, label %39, label %53
39: ; preds = %36
%40 = getelementptr inbounds i32, i32* %0, i64 1
%41 = load i32, i32* %40
%42 = icmp eq i32 %41, 0
br i1 %42, label %43, label %53
43: ; preds = %39
%44 = load i32, i32* %1
%45 = and i32 %44, 1048575
%46 = icmp eq i32 %45, 0
br i1 %46, label %47, label %53
47: ; preds = %43
%48 = getelementptr inbounds i32, i32* %1, i64 1
%49 = load i32, i32* %48
%50 = icmp eq i32 %49, 0
%51 = icmp eq i32 %7, %44
%52 = select i1 %50, i1 %51, i1 false
br i1 %52, label %222, label %53
53: ; preds = %47, %43, %39, %36
%54 = load i64, i64* @LLONG_MAX
br label %222
55: ; preds = %4
%56 = and i32 %7, 2139095040
%57 = icmp eq i32 %56, 2139095040
br i1 %57, label %62, label %58
58: ; preds = %55
%59 = load i32, i32* %1
%60 = and i32 %59, 2139095040
%61 = icmp eq i32 %60, 2139095040
br i1 %61, label %62, label %84
62: ; preds = %58, %55
%63 = and i32 %7, -2139095041
%64 = icmp eq i32 %63, 0
br i1 %64, label %73, label %65
65: ; preds = %62
%66 = load i32, i32* %1
%67 = and i32 %66, -2139095041
%68 = icmp ne i32 %67, 0
%69 = select i1 %68, i1 %57, i1 false
%70 = and i32 %66, 2139095040
%71 = icmp eq i32 %70, 2139095040
%72 = select i1 %69, i1 %71, i1 false
br i1 %72, label %222, label %73
73: ; preds = %65, %62
%74 = and i32 %7, 8388607
%75 = icmp eq i32 %74, 0
br i1 %75, label %76, label %82
76: ; preds = %73
%77 = load i32, i32* %1
%78 = and i32 %77, 8388607
%79 = icmp eq i32 %78, 0
%80 = icmp eq i32 %7, %77
%81 = select i1 %79, i1 %80, i1 false
br i1 %81, label %222, label %82
82: ; preds = %76, %73
%83 = load i64, i64* @LLONG_MAX
br label %222
84: ; preds = %58, %11
%85 = phi i32 [ %59, %58 ], [ %12, %11 ]
%86 = xor i32 %85, %7
%87 = icmp sgt i32 %86, -1
br i1 %87, label %90, label %88
88: ; preds = %84
%89 = load i64, i64* @LLONG_MAX
br label %222
90: ; preds = %84
%91 = tail call i64 @is_double_rettype(i32 %3)
%92 = icmp eq i64 %91, 0
br i1 %92, label %116, label %93
93: ; preds = %90
%94 = getelementptr inbounds i32, i32* %1, i64 2
%95 = load i32, i32* %94
%96 = icmp eq i32 %95, 0
%97 = zext i1 %96 to i32
%98 = getelementptr inbounds i32, i32* %0, i64 1
%99 = load i32, i32* %98
%100 = getelementptr inbounds i32, i32* %1, i64 1
%101 = load i32, i32* %100
%102 = xor i32 %101, -1
%103 = add i32 %99, %102
%104 = add i32 %103, %97
%105 = icmp ult i32 %104, %99
%106 = xor i1 %96, true
%107 = select i1 %105, i1 true, i1 %106
%108 = icmp eq i32 %104, %99
%109 = select i1 %107, i1 %105, i1 %108
%110 = zext i1 %109 to i32
%111 = load i32, i32* %0
%112 = load i32, i32* %1
%113 = xor i32 %112, -1
%114 = add i32 %111, %113
%115 = add i32 %114, %110
br label %133
116: ; preds = %90
%117 = getelementptr inbounds i32, i32* %1, i64 1
%118 = load i32, i32* %117
%119 = icmp eq i32 %118, 0
%120 = zext i1 %119 to i32
%121 = load i32, i32* %0
%122 = load i32, i32* %1
%123 = xor i32 %122, -1
%124 = add i32 %121, %123
%125 = add i32 %124, %120
%126 = icmp ult i32 %125, %121
%127 = xor i1 %119, true
%128 = select i1 %126, i1 true, i1 %127
%129 = xor i1 %126, true
%130 = icmp ne i32 %125, %121
%131 = select i1 %128, i1 %129, i1 %130
%132 = sext i1 %131 to i32
br label %133
133: ; preds = %116, %93
%134 = phi i32 [ %115, %93 ], [ %132, %116 ]
%135 = phi i32 [ %104, %93 ], [ %125, %116 ]
%136 = phi i32 [ %95, %93 ], [ %118, %116 ]
%137 = sub i32 0, %136
%138 = icmp sgt i32 %2, 0
br i1 %138, label %139, label %194
139: ; preds = %133
%140 = icmp ugt i32 %2, 96
br i1 %140, label %222, label %141
141: ; preds = %139
%142 = icmp ugt i32 %2, 31
br i1 %142, label %143, label %178
143: ; preds = %141
%144 = add i32 %2, -32
%145 = lshr i32 %144, 5
%146 = add nuw nsw i32 %145, 1
%147 = and i32 %146, 7
%148 = icmp eq i32 %147, 0
br i1 %148, label %158, label %149
149: ; preds = %143, %149
%150 = phi i32 [ %151, %149 ], [ %135, %143 ]
%151 = phi i32 [ %154, %149 ], [ %134, %143 ]
%152 = phi i32 [ %155, %149 ], [ %2, %143 ]
%153 = phi i32 [ %156, %149 ], [ 0, %143 ]
%154 = ashr i32 %151, 31
%155 = add nsw i32 %152, -32
%156 = add i32 %153, 1
%157 = icmp eq i32 %156, %147
br i1 %157, label %158, label %149
158: ; preds = %149, %143
%159 = phi i32 [ %134, %143 ], [ %154, %149 ]
%160 = phi i32 [ %2, %143 ], [ %155, %149 ]
%161 = phi i32 [ undef, %143 ], [ %150, %149 ]
%162 = phi i32 [ undef, %143 ], [ %151, %149 ]
%163 = phi i32 [ undef, %143 ], [ %154, %149 ]
%164 = phi i32 [ undef, %143 ], [ %155, %149 ]
%165 = icmp ult i32 %144, 224
br i1 %165, label %172, label %166
166: ; preds = %158, %166
%167 = phi i32 [ %169, %166 ], [ %159, %158 ]
%168 = phi i32 [ %170, %166 ], [ %160, %158 ]
%169 = ashr i32 %167, 31
%170 = add nsw i32 %168, -256
%171 = icmp ugt i32 %170, 31
br i1 %171, label %166, label %172
172: ; preds = %166, %158
%173 = phi i32 [ %161, %158 ], [ %169, %166 ]
%174 = phi i32 [ %162, %158 ], [ %169, %166 ]
%175 = phi i32 [ %163, %158 ], [ %169, %166 ]
%176 = phi i32 [ %164, %158 ], [ %170, %166 ]
%177 = icmp eq i32 %176, 0
br i1 %177, label %194, label %178
178: ; preds = %141, %172
%179 = phi i32 [ %173, %172 ], [ %137, %141 ]
%180 = phi i32 [ %174, %172 ], [ %135, %141 ]
%181 = phi i32 [ %175, %172 ], [ %134, %141 ]
%182 = phi i32 [ %176, %172 ], [ %2, %141 ]
%183 = lshr i32 %179, %182
%184 = sub nuw nsw i32 32, %182
%185 = shl i32 %180, %184
%186 = or i32 %183, %185
%187 = lshr i32 %180, %182
%188 = shl i32 %181, %184
%189 = or i32 %187, %188
%190 = lshr i32 %181, %182
%191 = ashr i32 %181, 31
%192 = shl nsw i32 %191, %184
%193 = or i32 %192, %190
br label %194
194: ; preds = %172, %178, %133
%195 = phi i32 [ %193, %178 ], [ %175, %172 ], [ %134, %133 ]
%196 = phi i32 [ %189, %178 ], [ %174, %172 ], [ %135, %133 ]
%197 = phi i32 [ %186, %178 ], [ %173, %172 ], [ %137, %133 ]
%198 = icmp sgt i32 %195, -1
br i1 %198, label %207, label %199
199: ; preds = %194
%200 = xor i32 %197, -1
%201 = icmp eq i32 %197, -1
%202 = zext i1 %201 to i32
%203 = xor i32 %196, -1
%204 = add i32 %202, %203
%205 = xor i32 %195, -1
%206 = add i32 %202, %205
br label %207
207: ; preds = %194, %199
%208 = phi i32 [ %206, %199 ], [ %195, %194 ]
%209 = phi i32 [ %204, %199 ], [ %196, %194 ]
%210 = phi i32 [ %200, %199 ], [ %197, %194 ]
%211 = icmp ugt i32 %208, 524287
br i1 %211, label %212, label %214
212: ; preds = %207
%213 = load i64, i64* @LLONG_MAX
br label %222
214: ; preds = %207
%215 = zext i32 %208 to i64
%216 = tail call i32 @llvm.fshl.i32(i32 %209, i32 %210, i32 12)
%217 = zext i32 %216 to i64
%218 = shl nuw nsw i64 %215, 44
%219 = or i64 %218, %217
%220 = sub nsw i64 0, %219
%221 = select i1 %198, i64 %219, i64 %220
br label %222
222: ; preds = %139, %76, %65, %47, %33, %214, %212, %88, %82, %53
%223 = phi i64 [ %54, %53 ], [ %89, %88 ], [ %213, %212 ], [ %221, %214 ], [ %83, %82 ], [ 0, %33 ], [ 0, %47 ], [ 0, %65 ], [ 0, %76 ], [ 0, %139 ]
ret i64 %223
}