int ffuintfi4(unsigned int *input, long ntodo, double scale, double zero,
              int *output, int *status) {
  long ii;
  double dvalue;
  if (scale == 1. && zero == 2147483648.) {
    for (ii = 0; ii < ntodo; ii++)
      output[ii] = (*(int *)&input[ii]) ^ 0x80000000;
  } else if (scale == 1. && zero == 0.) {
    for (ii = 0; ii < ntodo; ii++) {
      if (input[ii] > 2147483647) {
        *status = -11;
        output[ii] = 2147483647;
      } else
        output[ii] = input[ii];
    }
  } else {
    for (ii = 0; ii < ntodo; ii++) {
      dvalue = (input[ii] - zero) / scale;
      if (dvalue < -2147483648.49) {
        *status = -11;
        output[ii] = (-2147483647 - 1);
      } else if (dvalue > 2147483647.49) {
        *status = -11;
        output[ii] = 2147483647;
      } else {
        if (dvalue >= 0)
          output[ii] = (int)(dvalue + .5);
        else
          output[ii] = (int)(dvalue - .5);
      }
    }
  }
  return (*status);
}


x86 assembly (clang, -O0):
<ffuintfi4>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movsd  %xmm0,-0x18(%rbp)
movsd  %xmm1,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
mov    %rcx,-0x30(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xed5(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    11a0 <ffuintfi4+0xa0>
jp     11a0 <ffuintfi4+0xa0>
movsd  -0x20(%rbp),%xmm0
movsd  0xec0(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    11a0 <ffuintfi4+0xa0>
jp     11a0 <ffuintfi4+0xa0>
movq   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x10(%rbp),%rax
jge    119b <ffuintfi4+0x9b>
mov    -0x8(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
xor    $0x80000000,%edx
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1160 <ffuintfi4+0x60>
jmp    1367 <ffuintfi4+0x267>
movsd  -0x18(%rbp),%xmm0
movsd  0xe53(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    124f <ffuintfi4+0x14f>
jp     124f <ffuintfi4+0x14f>
movsd  -0x20(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    124f <ffuintfi4+0x14f>
jp     124f <ffuintfi4+0x14f>
movq   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x10(%rbp),%rax
jge    124a <ffuintfi4+0x14a>
mov    -0x8(%rbp),%rax
mov    -0x38(%rbp),%rcx
cmpl   $0x7fffffff,(%rax,%rcx,4)
jbe    121e <ffuintfi4+0x11e>
mov    -0x30(%rbp),%rax
movl   $0xfffffff5,(%rax)
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
movl   $0x7fffffff,(%rax,%rcx,4)
jmp    1234 <ffuintfi4+0x134>
mov    -0x8(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1239 <ffuintfi4+0x139>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    11dd <ffuintfi4+0xdd>
jmp    1362 <ffuintfi4+0x262>
movq   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x10(%rbp),%rax
jge    135d <ffuintfi4+0x25d>
mov    -0x8(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cvtsi2sd %rax,%xmm0
subsd  -0x20(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xd84(%rip),%xmm0
ucomisd -0x40(%rbp),%xmm0
jbe    12b5 <ffuintfi4+0x1b5>
mov    -0x30(%rbp),%rax
movl   $0xfffffff5,(%rax)
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
movl   $0x80000000,(%rax,%rcx,4)
jmp    1347 <ffuintfi4+0x247>
movsd  -0x40(%rbp),%xmm0
movsd  0xd56(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12ea <ffuintfi4+0x1ea>
mov    -0x30(%rbp),%rax
movl   $0xfffffff5,(%rax)
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
movl   $0x7fffffff,(%rax,%rcx,4)
jmp    1342 <ffuintfi4+0x242>
movsd  -0x40(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     131d <ffuintfi4+0x21d>
movsd  0xd1c(%rip),%xmm0
addsd  -0x40(%rbp),%xmm0
cvttsd2si %xmm0,%edx
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    133d <ffuintfi4+0x23d>
movsd  -0x40(%rbp),%xmm0
movsd  0xcf6(%rip),%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edx
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1342 <ffuintfi4+0x242>
jmp    1347 <ffuintfi4+0x247>
jmp    134c <ffuintfi4+0x24c>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1257 <ffuintfi4+0x157>
jmp    1362 <ffuintfi4+0x262>
jmp    1367 <ffuintfi4+0x267>
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<ffuintfi4>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
ucomisd 0xef0(%rip),%xmm0
jne    11f0 <ffuintfi4+0xf0>
jp     11f0 <ffuintfi4+0xf0>
ucomisd 0xee4(%rip),%xmm1
jne    11f0 <ffuintfi4+0xf0>
jp     11f0 <ffuintfi4+0xf0>
test   %rsi,%rsi
jle    14d3 <ffuintfi4+0x3d3>
cmp    $0x8,%rsi
jb     1159 <ffuintfi4+0x59>
lea    (%rdi,%rsi,4),%rax
cmp    %rdx,%rax
jbe    12c7 <ffuintfi4+0x1c7>
lea    (%rdx,%rsi,4),%rax
cmp    %rdi,%rax
jbe    12c7 <ffuintfi4+0x1c7>
xor    %r11d,%r11d
mov    %r11,%r8
not    %r8
add    %rsi,%r8
mov    %rsi,%r10
and    $0x3,%r10
je     1195 <ffuintfi4+0x95>
mov    $0x80000000,%r9d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%rdi,%r11,4),%eax
xor    %r9d,%eax
mov    %eax,(%rdx,%r11,4)
add    $0x1,%r11
add    $0xffffffffffffffff,%r10
jne    1180 <ffuintfi4+0x80>
cmp    $0x3,%r8
jb     14d3 <ffuintfi4+0x3d3>
mov    $0x80000000,%r8d
cs nopw 0x0(%rax,%rax,1)
nop
mov    (%rdi,%r11,4),%eax
xor    %r8d,%eax
mov    %eax,(%rdx,%r11,4)
mov    0x4(%rdi,%r11,4),%eax
xor    %r8d,%eax
mov    %eax,0x4(%rdx,%r11,4)
mov    0x8(%rdi,%r11,4),%eax
xor    %r8d,%eax
mov    %eax,0x8(%rdx,%r11,4)
mov    0xc(%rdi,%r11,4),%eax
xor    %r8d,%eax
mov    %eax,0xc(%rdx,%r11,4)
add    $0x4,%r11
cmp    %r11,%rsi
jne    11b0 <ffuintfi4+0xb0>
jmp    14d3 <ffuintfi4+0x3d3>
ucomisd 0xe08(%rip),%xmm0
jne    1223 <ffuintfi4+0x123>
jp     1223 <ffuintfi4+0x123>
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm1
jne    1223 <ffuintfi4+0x123>
jp     1223 <ffuintfi4+0x123>
test   %rsi,%rsi
jle    14d3 <ffuintfi4+0x3d3>
cmp    $0x8,%rsi
jae    138e <ffuintfi4+0x28e>
xor    %r9d,%r9d
jmp    14a7 <ffuintfi4+0x3a7>
test   %rsi,%rsi
jle    14d3 <ffuintfi4+0x3d3>
xor    %eax,%eax
movsd  0xdda(%rip),%xmm2
movsd  0xdda(%rip),%xmm3
xorpd  %xmm4,%xmm4
movsd  0xdde(%rip),%xmm5
movsd  0xdce(%rip),%xmm6
jmp    127d <ffuintfi4+0x17d>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movl   $0xfffffff5,(%rcx)
mov    $0x80000000,%r8d
mov    %r8d,(%rdx,%rax,4)
add    $0x1,%rax
cmp    %rax,%rsi
je     14d3 <ffuintfi4+0x3d3>
mov    (%rdi,%rax,4),%ebp
xorps  %xmm7,%xmm7
cvtsi2sd %rbp,%xmm7
subsd  %xmm1,%xmm7
divsd  %xmm0,%xmm7
ucomisd %xmm7,%xmm2
ja     1260 <ffuintfi4+0x160>
ucomisd %xmm3,%xmm7
jbe    12b0 <ffuintfi4+0x1b0>
movl   $0xfffffff5,(%rcx)
mov    $0x7fffffff,%r8d
jmp    126c <ffuintfi4+0x16c>
nopw   0x0(%rax,%rax,1)
ucomisd %xmm4,%xmm7
jae    12bc <ffuintfi4+0x1bc>
addsd  %xmm5,%xmm7
jmp    12c0 <ffuintfi4+0x1c0>
addsd  %xmm6,%xmm7
cvttsd2si %xmm7,%r8d
jmp    126c <ffuintfi4+0x16c>
mov    %rsi,%r11
and    $0xfffffffffffffff8,%r11
lea    -0x8(%r11),%rax
mov    %rax,%r9
shr    $0x3,%r9
add    $0x1,%r9
test   %rax,%rax
je     151b <ffuintfi4+0x41b>
mov    %r9,%r10
and    $0xfffffffffffffffe,%r10
xor    %r8d,%r8d
movapd 0xd38(%rip),%xmm0
nopl   0x0(%rax,%rax,1)
movupd (%rdi,%r8,4),%xmm1
movupd 0x10(%rdi,%r8,4),%xmm2
xorpd  %xmm0,%xmm1
xorpd  %xmm0,%xmm2
movupd %xmm1,(%rdx,%r8,4)
movupd %xmm2,0x10(%rdx,%r8,4)
movupd 0x20(%rdi,%r8,4),%xmm1
movupd 0x30(%rdi,%r8,4),%xmm2
xorpd  %xmm0,%xmm1
xorpd  %xmm0,%xmm2
movupd %xmm1,0x20(%rdx,%r8,4)
movupd %xmm2,0x30(%rdx,%r8,4)
add    $0x10,%r8
add    $0xfffffffffffffffe,%r10
jne    1300 <ffuintfi4+0x200>
test   $0x1,%r9b
je     1380 <ffuintfi4+0x280>
movupd (%rdi,%r8,4),%xmm0
movupd 0x10(%rdi,%r8,4),%xmm1
movapd 0xcc5(%rip),%xmm2
xorpd  %xmm2,%xmm0
xorpd  %xmm2,%xmm1
movupd %xmm0,(%rdx,%r8,4)
movupd %xmm1,0x10(%rdx,%r8,4)
cmp    %rsi,%r11
je     14d3 <ffuintfi4+0x3d3>
jmp    115c <ffuintfi4+0x5c>
lea    (%rdx,%rsi,4),%rax
cmp    %rcx,%rax
seta   %r14b
lea    0x4(%rcx),%rbp
cmp    %rdx,%rbp
seta   %r15b
lea    (%rdi,%rsi,4),%rbx
cmp    %rcx,%rbx
seta   %r12b
cmp    %rdi,%rbp
seta   %r10b
cmp    %rdx,%rbx
seta   %r8b
cmp    %rdi,%rax
seta   %r11b
xor    %r9d,%r9d
test   %r15b,%r14b
jne    14a7 <ffuintfi4+0x3a7>
and    %r10b,%r12b
jne    14a7 <ffuintfi4+0x3a7>
and    %r11b,%r8b
jne    14a7 <ffuintfi4+0x3a7>
mov    %rsi,%r9
and    $0xfffffffffffffff8,%r9
xor    %r8d,%r8d
movaps 0xc3d(%rip),%xmm0
movaps 0xc46(%rip),%xmm1
jmp    1448 <ffuintfi4+0x348>
nopl   0x0(%rax)
movl   $0xfffffff5,(%rcx)
movaps %xmm3,%xmm4
xorps  %xmm0,%xmm4
pcmpeqd %xmm5,%xmm5
pcmpgtd %xmm4,%xmm5
andps  %xmm5,%xmm3
andnps %xmm1,%xmm5
orps   %xmm3,%xmm5
movaps %xmm2,%xmm3
xorps  %xmm0,%xmm3
pcmpeqd %xmm4,%xmm4
pcmpgtd %xmm3,%xmm4
andps  %xmm4,%xmm2
andnps %xmm1,%xmm4
orps   %xmm2,%xmm4
movups %xmm5,(%rdx,%r8,4)
movups %xmm4,0x10(%rdx,%r8,4)
add    $0x8,%r8
cmp    %r8,%r9
je     14a2 <ffuintfi4+0x3a2>
movups (%rdi,%r8,4),%xmm3
movups 0x10(%rdi,%r8,4),%xmm2
movmskps %xmm3,%eax
test   $0x1,%al
jne    1400 <ffuintfi4+0x300>
mov    %eax,%ebx
and    $0x2,%bl
shr    %bl
jne    1400 <ffuintfi4+0x300>
mov    %eax,%ebx
and    $0x4,%bl
shr    $0x2,%bl
jne    1400 <ffuintfi4+0x300>
shr    $0x3,%al
jne    1400 <ffuintfi4+0x300>
movmskps %xmm2,%eax
test   $0x1,%al
jne    1400 <ffuintfi4+0x300>
mov    %eax,%ebx
and    $0x2,%bl
shr    %bl
jne    1400 <ffuintfi4+0x300>
mov    %eax,%ebx
and    $0x4,%bl
shr    $0x2,%bl
jne    1400 <ffuintfi4+0x300>
shr    $0x3,%al
je     1406 <ffuintfi4+0x306>
jmp    1400 <ffuintfi4+0x300>
cmp    %rsi,%r9
je     14d3 <ffuintfi4+0x3d3>
mov    %r9,%r8
not    %r8
test   $0x1,%sil
je     14ce <ffuintfi4+0x3ce>
mov    (%rdi,%r9,4),%eax
test   %eax,%eax
jns    14c6 <ffuintfi4+0x3c6>
movl   $0xfffffff5,(%rcx)
mov    $0x7fffffff,%eax
mov    %eax,(%rdx,%r9,4)
or     $0x1,%r9
add    %rsi,%r8
jne    14ee <ffuintfi4+0x3ee>
mov    (%rcx),%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
xchg   %ax,%ax
mov    %eax,0x4(%rdx,%r9,4)
add    $0x2,%r9
cmp    %r9,%rsi
je     14d3 <ffuintfi4+0x3d3>
mov    (%rdi,%r9,4),%eax
test   %eax,%eax
jns    1501 <ffuintfi4+0x401>
movl   $0xfffffff5,(%rcx)
mov    $0x7fffffff,%eax
mov    %eax,(%rdx,%r9,4)
mov    0x4(%rdi,%r9,4),%eax
test   %eax,%eax
jns    14e0 <ffuintfi4+0x3e0>
movl   $0xfffffff5,(%rcx)
mov    $0x7fffffff,%eax
jmp    14e0 <ffuintfi4+0x3e0>
xor    %r8d,%r8d
test   $0x1,%r9b
jne    1356 <ffuintfi4+0x256>
jmp    1380 <ffuintfi4+0x280>

LLVM IR (-O0):
define i32 @ffuintfi4(i32* %0, i64 %1, double %2, double %3, i32* %4, i32* %5) {
%7 = alloca i32*
%8 = alloca i64
%9 = alloca double
%10 = alloca double
%11 = alloca i32*
%12 = alloca i32*
%13 = alloca i64
%14 = alloca double
store i32* %0, i32** %7
store i64 %1, i64* %8
store double %2, double* %9
store double %3, double* %10
store i32* %4, i32** %11
store i32* %5, i32** %12
%15 = load double, double* %9
%16 = fcmp oeq double %15, 1.000000e+00
br i1 %16, label %17, label %38
17: ; preds = %6
%18 = load double, double* %10
%19 = fcmp oeq double %18, 0x41E0000000000000
br i1 %19, label %20, label %38
20: ; preds = %17
store i64 0, i64* %13
br label %21
21: ; preds = %34, %20
%22 = load i64, i64* %13
%23 = load i64, i64* %8
%24 = icmp slt i64 %22, %23
br i1 %24, label %25, label %37
25: ; preds = %21
%26 = load i32*, i32** %7
%27 = load i64, i64* %13
%28 = getelementptr inbounds i32, i32* %26, i64 %27
%29 = load i32, i32* %28
%30 = xor i32 %29, -2147483648
%31 = load i32*, i32** %11
%32 = load i64, i64* %13
%33 = getelementptr inbounds i32, i32* %31, i64 %32
store i32 %30, i32* %33
br label %34
34: ; preds = %25
%35 = load i64, i64* %13
%36 = add nsw i64 %35, 1
store i64 %36, i64* %13
br label %21
37: ; preds = %21
br label %128
38: ; preds = %17, %6
%39 = load double, double* %9
%40 = fcmp oeq double %39, 1.000000e+00
br i1 %40, label %41, label %73
41: ; preds = %38
%42 = load double, double* %10
%43 = fcmp oeq double %42, 0.000000e+00
br i1 %43, label %44, label %73
44: ; preds = %41
store i64 0, i64* %13
br label %45
45: ; preds = %69, %44
%46 = load i64, i64* %13
%47 = load i64, i64* %8
%48 = icmp slt i64 %46, %47
br i1 %48, label %49, label %72
49: ; preds = %45
%50 = load i32*, i32** %7
%51 = load i64, i64* %13
%52 = getelementptr inbounds i32, i32* %50, i64 %51
%53 = load i32, i32* %52
%54 = icmp ugt i32 %53, 2147483647
br i1 %54, label %55, label %60
55: ; preds = %49
%56 = load i32*, i32** %12
store i32 -11, i32* %56
%57 = load i32*, i32** %11
%58 = load i64, i64* %13
%59 = getelementptr inbounds i32, i32* %57, i64 %58
store i32 2147483647, i32* %59
br label %68
60: ; preds = %49
%61 = load i32*, i32** %7
%62 = load i64, i64* %13
%63 = getelementptr inbounds i32, i32* %61, i64 %62
%64 = load i32, i32* %63
%65 = load i32*, i32** %11
%66 = load i64, i64* %13
%67 = getelementptr inbounds i32, i32* %65, i64 %66
store i32 %64, i32* %67
br label %68
68: ; preds = %60, %55
br label %69
69: ; preds = %68
%70 = load i64, i64* %13
%71 = add nsw i64 %70, 1
store i64 %71, i64* %13
br label %45
72: ; preds = %45
br label %127
73: ; preds = %41, %38
store i64 0, i64* %13
br label %74
74: ; preds = %123, %73
%75 = load i64, i64* %13
%76 = load i64, i64* %8
%77 = icmp slt i64 %75, %76
br i1 %77, label %78, label %126
78: ; preds = %74
%79 = load i32*, i32** %7
%80 = load i64, i64* %13
%81 = getelementptr inbounds i32, i32* %79, i64 %80
%82 = load i32, i32* %81
%83 = uitofp i32 %82 to double
%84 = load double, double* %10
%85 = fsub double %83, %84
%86 = load double, double* %9
%87 = fdiv double %85, %86
store double %87, double* %14
%88 = load double, double* %14
%89 = fcmp olt double %88, 0xC1E00000000FAE14
br i1 %89, label %90, label %95
90: ; preds = %78
%91 = load i32*, i32** %12
store i32 -11, i32* %91
%92 = load i32*, i32** %11
%93 = load i64, i64* %13
%94 = getelementptr inbounds i32, i32* %92, i64 %93
store i32 -2147483648, i32* %94
br label %122
95: ; preds = %78
%96 = load double, double* %14
%97 = fcmp ogt double %96, 0x41DFFFFFFFDF5C29
br i1 %97, label %98, label %103
98: ; preds = %95
%99 = load i32*, i32** %12
store i32 -11, i32* %99
%100 = load i32*, i32** %11
%101 = load i64, i64* %13
%102 = getelementptr inbounds i32, i32* %100, i64 %101
store i32 2147483647, i32* %102
br label %121
103: ; preds = %95
%104 = load double, double* %14
%105 = fcmp oge double %104, 0.000000e+00
br i1 %105, label %106, label %113
106: ; preds = %103
%107 = load double, double* %14
%108 = fadd double %107, 5.000000e-01
%109 = fptosi double %108 to i32
%110 = load i32*, i32** %11
%111 = load i64, i64* %13
%112 = getelementptr inbounds i32, i32* %110, i64 %111
store i32 %109, i32* %112
br label %120
113: ; preds = %103
%114 = load double, double* %14
%115 = fsub double %114, 5.000000e-01
%116 = fptosi double %115 to i32
%117 = load i32*, i32** %11
%118 = load i64, i64* %13
%119 = getelementptr inbounds i32, i32* %117, i64 %118
store i32 %116, i32* %119
br label %120
120: ; preds = %113, %106
br label %121
121: ; preds = %120, %98
br label %122
122: ; preds = %121, %90
br label %123
123: ; preds = %122
%124 = load i64, i64* %13
%125 = add nsw i64 %124, 1
store i64 %125, i64* %13
br label %74
126: ; preds = %74
br label %127
127: ; preds = %126, %72
br label %128
128: ; preds = %127, %37
%129 = load i32*, i32** %12
%130 = load i32, i32* %129
ret i32 %130
}

LLVM IR (-O2):
define i32 @ffuintfi4(i32* nocapture %0, i64 %1, double %2, double %3, i32* nocapture writeonly %4, i32* nocapture %5) {
%7 = fcmp oeq double %2, 1.000000e+00
%8 = fcmp oeq double %3, 0x41E0000000000000
%9 = and i1 %7, %8
br i1 %9, label %10, label %120
10: ; preds = %6
%11 = icmp sgt i64 %1, 0
br i1 %11, label %12, label %244
12: ; preds = %10
%13 = icmp ult i64 %1, 8
br i1 %13, label %78, label %14
14: ; preds = %12
%15 = getelementptr i32, i32* %4, i64 %1
%16 = getelementptr i32, i32* %0, i64 %1
%17 = icmp ugt i32* %16, %4
%18 = icmp ugt i32* %15, %0
%19 = and i1 %17, %18
br i1 %19, label %78, label %20
20: ; preds = %14
%21 = and i64 %1, -8
%22 = add i64 %21, -8
%23 = lshr exact i64 %22, 3
%24 = add nuw nsw i64 %23, 1
%25 = and i64 %24, 1
%26 = icmp eq i64 %22, 0
br i1 %26, label %60, label %27
27: ; preds = %20
%28 = and i64 %24, 4611686018427387902
br label %29
29: ; preds = %29, %27
%30 = phi i64 [ 0, %27 ], [ %57, %29 ]
%31 = phi i64 [ 0, %27 ], [ %58, %29 ]
%32 = getelementptr inbounds i32, i32* %0, i64 %30
%33 = bitcast i32* %32 to <4 x i32>*
%34 = load <4 x i32>, <4 x i32>* %33
%35 = getelementptr inbounds i32, i32* %32, i64 4
%36 = bitcast i32* %35 to <4 x i32>*
%37 = load <4 x i32>, <4 x i32>* %36
%38 = xor <4 x i32> %34, <i32 -2147483648, i32 -2147483648, i32 -2147483648, i32 -2147483648>
%39 = xor <4 x i32> %37, <i32 -2147483648, i32 -2147483648, i32 -2147483648, i32 -2147483648>
%40 = getelementptr inbounds i32, i32* %4, i64 %30
%41 = bitcast i32* %40 to <4 x i32>*
store <4 x i32> %38, <4 x i32>* %41
%42 = getelementptr inbounds i32, i32* %40, i64 4
%43 = bitcast i32* %42 to <4 x i32>*
store <4 x i32> %39, <4 x i32>* %43
%44 = or i64 %30, 8
%45 = getelementptr inbounds i32, i32* %0, i64 %44
%46 = bitcast i32* %45 to <4 x i32>*
%47 = load <4 x i32>, <4 x i32>* %46
%48 = getelementptr inbounds i32, i32* %45, i64 4
%49 = bitcast i32* %48 to <4 x i32>*
%50 = load <4 x i32>, <4 x i32>* %49
%51 = xor <4 x i32> %47, <i32 -2147483648, i32 -2147483648, i32 -2147483648, i32 -2147483648>
%52 = xor <4 x i32> %50, <i32 -2147483648, i32 -2147483648, i32 -2147483648, i32 -2147483648>
%53 = getelementptr inbounds i32, i32* %4, i64 %44
%54 = bitcast i32* %53 to <4 x i32>*
store <4 x i32> %51, <4 x i32>* %54
%55 = getelementptr inbounds i32, i32* %53, i64 4
%56 = bitcast i32* %55 to <4 x i32>*
store <4 x i32> %52, <4 x i32>* %56
%57 = add nuw i64 %30, 16
%58 = add i64 %31, 2
%59 = icmp eq i64 %58, %28
br i1 %59, label %60, label %29
60: ; preds = %29, %20
%61 = phi i64 [ 0, %20 ], [ %57, %29 ]
%62 = icmp eq i64 %25, 0
br i1 %62, label %76, label %63
63: ; preds = %60
%64 = getelementptr inbounds i32, i32* %0, i64 %61
%65 = bitcast i32* %64 to <4 x i32>*
%66 = load <4 x i32>, <4 x i32>* %65
%67 = getelementptr inbounds i32, i32* %64, i64 4
%68 = bitcast i32* %67 to <4 x i32>*
%69 = load <4 x i32>, <4 x i32>* %68
%70 = xor <4 x i32> %66, <i32 -2147483648, i32 -2147483648, i32 -2147483648, i32 -2147483648>
%71 = xor <4 x i32> %69, <i32 -2147483648, i32 -2147483648, i32 -2147483648, i32 -2147483648>
%72 = getelementptr inbounds i32, i32* %4, i64 %61
%73 = bitcast i32* %72 to <4 x i32>*
store <4 x i32> %70, <4 x i32>* %73
%74 = getelementptr inbounds i32, i32* %72, i64 4
%75 = bitcast i32* %74 to <4 x i32>*
store <4 x i32> %71, <4 x i32>* %75
br label %76
76: ; preds = %60, %63
%77 = icmp eq i64 %21, %1
br i1 %77, label %244, label %78
78: ; preds = %14, %12, %76
%79 = phi i64 [ 0, %14 ], [ 0, %12 ], [ %21, %76 ]
%80 = xor i64 %79, -1
%81 = add i64 %80, %1
%82 = and i64 %1, 3
%83 = icmp eq i64 %82, 0
br i1 %83, label %94, label %84
84: ; preds = %78, %84
%85 = phi i64 [ %91, %84 ], [ %79, %78 ]
%86 = phi i64 [ %92, %84 ], [ 0, %78 ]
%87 = getelementptr inbounds i32, i32* %0, i64 %85
%88 = load i32, i32* %87
%89 = xor i32 %88, -2147483648
%90 = getelementptr inbounds i32, i32* %4, i64 %85
store i32 %89, i32* %90
%91 = add nuw nsw i64 %85, 1
%92 = add i64 %86, 1
%93 = icmp eq i64 %92, %82
br i1 %93, label %94, label %84
94: ; preds = %84, %78
%95 = phi i64 [ %79, %78 ], [ %91, %84 ]
%96 = icmp ult i64 %81, 3
br i1 %96, label %244, label %97
97: ; preds = %94, %97
%98 = phi i64 [ %118, %97 ], [ %95, %94 ]
%99 = getelementptr inbounds i32, i32* %0, i64 %98
%100 = load i32, i32* %99
%101 = xor i32 %100, -2147483648
%102 = getelementptr inbounds i32, i32* %4, i64 %98
store i32 %101, i32* %102
%103 = add nuw nsw i64 %98, 1
%104 = getelementptr inbounds i32, i32* %0, i64 %103
%105 = load i32, i32* %104
%106 = xor i32 %105, -2147483648
%107 = getelementptr inbounds i32, i32* %4, i64 %103
store i32 %106, i32* %107
%108 = add nuw nsw i64 %98, 2
%109 = getelementptr inbounds i32, i32* %0, i64 %108
%110 = load i32, i32* %109
%111 = xor i32 %110, -2147483648
%112 = getelementptr inbounds i32, i32* %4, i64 %108
store i32 %111, i32* %112
%113 = add nuw nsw i64 %98, 3
%114 = getelementptr inbounds i32, i32* %0, i64 %113
%115 = load i32, i32* %114
%116 = xor i32 %115, -2147483648
%117 = getelementptr inbounds i32, i32* %4, i64 %113
store i32 %116, i32* %117
%118 = add nuw nsw i64 %98, 4
%119 = icmp eq i64 %118, %1
br i1 %119, label %244, label %97
120: ; preds = %6
%121 = fcmp oeq double %3, 0.000000e+00
%122 = and i1 %7, %121
%123 = icmp sgt i64 %1, 0
br i1 %122, label %125, label %124
124: ; preds = %120
br i1 %123, label %219, label %244
125: ; preds = %120
br i1 %123, label %126, label %244
126: ; preds = %125
%127 = icmp ult i64 %1, 8
br i1 %127, label %182, label %128
128: ; preds = %126
%129 = getelementptr i32, i32* %5, i64 1
%130 = getelementptr i32, i32* %4, i64 %1
%131 = getelementptr i32, i32* %0, i64 %1
%132 = icmp ugt i32* %130, %5
%133 = icmp ugt i32* %129, %4
%134 = and i1 %132, %133
%135 = icmp ugt i32* %131, %5
%136 = icmp ugt i32* %129, %0
%137 = and i1 %135, %136
%138 = or i1 %134, %137
%139 = icmp ugt i32* %131, %4
%140 = icmp ugt i32* %130, %0
%141 = and i1 %139, %140
%142 = or i1 %138, %141
br i1 %142, label %182, label %143
143: ; preds = %128
%144 = and i64 %1, -8
br label %145
145: ; preds = %171, %143
%146 = phi i64 [ 0, %143 ], [ %178, %171 ]
%147 = getelementptr inbounds i32, i32* %0, i64 %146
%148 = bitcast i32* %147 to <4 x i32>*
%149 = load <4 x i32>, <4 x i32>* %148
%150 = getelementptr inbounds i32, i32* %147, i64 4
%151 = bitcast i32* %150 to <4 x i32>*
%152 = load <4 x i32>, <4 x i32>* %151
%153 = icmp slt <4 x i32> %149, zeroinitializer
%154 = icmp slt <4 x i32> %152, zeroinitializer
%155 = extractelement <4 x i1> %153, i64 0
%156 = extractelement <4 x i1> %153, i64 1
%157 = or i1 %155, %156
%158 = extractelement <4 x i1> %153, i64 2
%159 = or i1 %157, %158
%160 = extractelement <4 x i1> %153, i64 3
%161 = or i1 %159, %160
%162 = extractelement <4 x i1> %154, i64 0
%163 = or i1 %161, %162
%164 = extractelement <4 x i1> %154, i64 1
%165 = or i1 %163, %164
%166 = extractelement <4 x i1> %154, i64 2
%167 = or i1 %165, %166
%168 = extractelement <4 x i1> %154, i64 3
%169 = or i1 %167, %168
br i1 %169, label %170, label %171
170: ; preds = %145
store i32 -11, i32* %5
br label %171
171: ; preds = %145, %170
%172 = select <4 x i1> %153, <4 x i32> <i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647>, <4 x i32> %149
%173 = select <4 x i1> %154, <4 x i32> <i32 2147483647, i32 2147483647, i32 2147483647, i32 2147483647>, <4 x i32> %152
%174 = getelementptr inbounds i32, i32* %4, i64 %146
%175 = bitcast i32* %174 to <4 x i32>*
store <4 x i32> %172, <4 x i32>* %175
%176 = getelementptr inbounds i32, i32* %174, i64 4
%177 = bitcast i32* %176 to <4 x i32>*
store <4 x i32> %173, <4 x i32>* %177
%178 = add nuw i64 %146, 8
%179 = icmp eq i64 %178, %144
br i1 %179, label %180, label %145
180: ; preds = %171
%181 = icmp eq i64 %144, %1
br i1 %181, label %244, label %182
182: ; preds = %128, %126, %180
%183 = phi i64 [ 0, %128 ], [ 0, %126 ], [ %144, %180 ]
%184 = xor i64 %183, -1
%185 = and i64 %1, 1
%186 = icmp eq i64 %185, 0
br i1 %186, label %196, label %187
187: ; preds = %182
%188 = getelementptr inbounds i32, i32* %0, i64 %183
%189 = load i32, i32* %188
%190 = icmp slt i32 %189, 0
br i1 %190, label %191, label %192
191: ; preds = %187
store i32 -11, i32* %5
br label %192
192: ; preds = %191, %187
%193 = phi i32 [ 2147483647, %191 ], [ %189, %187 ]
%194 = getelementptr inbounds i32, i32* %4, i64 %183
store i32 %193, i32* %194
%195 = or i64 %183, 1
br label %196
196: ; preds = %192, %182
%197 = phi i64 [ %183, %182 ], [ %195, %192 ]
%198 = sub i64 0, %1
%199 = icmp eq i64 %184, %198
br i1 %199, label %244, label %200
200: ; preds = %196, %214
%201 = phi i64 [ %217, %214 ], [ %197, %196 ]
%202 = getelementptr inbounds i32, i32* %0, i64 %201
%203 = load i32, i32* %202
%204 = icmp slt i32 %203, 0
br i1 %204, label %205, label %206
205: ; preds = %200
store i32 -11, i32* %5
br label %206
206: ; preds = %200, %205
%207 = phi i32 [ 2147483647, %205 ], [ %203, %200 ]
%208 = getelementptr inbounds i32, i32* %4, i64 %201
store i32 %207, i32* %208
%209 = add nuw nsw i64 %201, 1
%210 = getelementptr inbounds i32, i32* %0, i64 %209
%211 = load i32, i32* %210
%212 = icmp slt i32 %211, 0
br i1 %212, label %213, label %214
213: ; preds = %206
store i32 -11, i32* %5
br label %214
214: ; preds = %213, %206
%215 = phi i32 [ 2147483647, %213 ], [ %211, %206 ]
%216 = getelementptr inbounds i32, i32* %4, i64 %209
store i32 %215, i32* %216
%217 = add nuw nsw i64 %201, 2
%218 = icmp eq i64 %217, %1
br i1 %218, label %244, label %200
219: ; preds = %124, %239
%220 = phi i64 [ %242, %239 ], [ 0, %124 ]
%221 = getelementptr inbounds i32, i32* %0, i64 %220
%222 = load i32, i32* %221
%223 = uitofp i32 %222 to double
%224 = fsub double %223, %3
%225 = fdiv double %224, %2
%226 = fcmp olt double %225, 0xC1E00000000FAE14
br i1 %226, label %227, label %228
227: ; preds = %219
store i32 -11, i32* %5
br label %239
228: ; preds = %219
%229 = fcmp ogt double %225, 0x41DFFFFFFFDF5C29
br i1 %229, label %230, label %231
230: ; preds = %228
store i32 -11, i32* %5
br label %239
231: ; preds = %228
%232 = fcmp ult double %225, 0.000000e+00
br i1 %232, label %236, label %233
233: ; preds = %231
%234 = fadd double %225, 5.000000e-01
%235 = fptosi double %234 to i32
br label %239
236: ; preds = %231
%237 = fadd double %225, -5.000000e-01
%238 = fptosi double %237 to i32
br label %239
239: ; preds = %227, %233, %236, %230
%240 = phi i32 [ -2147483648, %227 ], [ %235, %233 ], [ %238, %236 ], [ 2147483647, %230 ]
%241 = getelementptr inbounds i32, i32* %4, i64 %220
store i32 %240, i32* %241
%242 = add nuw nsw i64 %220, 1
%243 = icmp eq i64 %242, %1
br i1 %243, label %244, label %219
244: ; preds = %239, %196, %214, %94, %97, %180, %76, %124, %125, %10
%245 = load i32, i32* %5
ret i32 %245
}