int ffu4fr4(unsigned long *input, long ntodo, double scale, double zero,
            float *output, int *status) {
  long ii;
  if (scale == 1. && zero == 0.) {
    for (ii = 0; ii < ntodo; ii++)
      output[ii] = (float)input[ii];
  } else {
    for (ii = 0; ii < ntodo; ii++)
      output[ii] = (float)((input[ii] - zero) / scale);
  }
  return (*status);
}


x86 assembly (clang, -O0):
<ffu4fr4>:
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    11d6 <ffu4fr4+0xd6>
jp     11d6 <ffu4fr4+0xd6>
movsd  -0x20(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11d6 <ffu4fr4+0xd6>
jp     11d6 <ffu4fr4+0xd6>
movq   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x10(%rbp),%rax
jge    11d1 <ffu4fr4+0xd1>
mov    -0x8(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,%rdx
shr    %rdx
mov    %eax,%ecx
and    $0x1,%ecx
or     %rdx,%rcx
cvtsi2ss %rcx,%xmm0
addss  %xmm0,%xmm0
cvtsi2ss %rax,%xmm1
movss  %xmm1,-0x40(%rbp)
test   %rax,%rax
movss  %xmm0,-0x3c(%rbp)
js     11ae <ffu4fr4+0xae>
movss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x3c(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    115b <ffu4fr4+0x5b>
jmp    124c <ffu4fr4+0x14c>
movq   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x10(%rbp),%rax
jge    1247 <ffu4fr4+0x147>
mov    -0x8(%rbp),%rax
mov    -0x38(%rbp),%rcx
movq   (%rax,%rcx,8),%xmm0
movaps 0xe10(%rip),%xmm1
punpckldq %xmm1,%xmm0
movapd 0xe14(%rip),%xmm1
subpd  %xmm1,%xmm0
movaps %xmm0,%xmm1
unpckhpd %xmm0,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x20(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x28(%rbp),%rax
mov    -0x38(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    11de <ffu4fr4+0xde>
jmp    124c <ffu4fr4+0x14c>
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<ffu4fr4>:
push   %r14
push   %rbx
ucomisd 0xef5(%rip),%xmm0
jne    1132 <ffu4fr4+0x32>
jp     1132 <ffu4fr4+0x32>
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm1
jne    1132 <ffu4fr4+0x32>
jp     1132 <ffu4fr4+0x32>
test   %rsi,%rsi
jle    138c <ffu4fr4+0x28c>
cmp    $0x1,%rsi
jne    114c <ffu4fr4+0x4c>
xor    %r11d,%r11d
jmp    13b7 <ffu4fr4+0x2b7>
test   %rsi,%rsi
jle    138c <ffu4fr4+0x28c>
cmp    $0x1,%rsi
jne    1211 <ffu4fr4+0x111>
xor    %eax,%eax
jmp    133a <ffu4fr4+0x23a>
mov    %rsi,%r11
and    $0xfffffffffffffffe,%r11
lea    -0x2(%r11),%rax
mov    %rax,%r9
shr    %r9
add    $0x1,%r9
mov    %r9d,%r8d
and    $0x3,%r8d
cmp    $0x6,%rax
jae    13da <ffu4fr4+0x2da>
xor    %r10d,%r10d
test   %r8,%r8
je     1387 <ffu4fr4+0x287>
lea    (%rdx,%r10,4),%r9
lea    (%rdi,%r10,8),%r10
shl    $0x3,%r8
xor    %eax,%eax
jmp    11ad <ffu4fr4+0xad>
xchg   %ax,%ax
xorps  %xmm1,%xmm1
cvtsi2ss %rbx,%xmm1
unpcklps %xmm1,%xmm0
movlps %xmm0,(%r9,%rax,1)
add    $0x8,%rax
cmp    %rax,%r8
je     1387 <ffu4fr4+0x287>
movdqu (%r10,%rax,2),%xmm1
movq   %xmm1,%rbx
test   %rbx,%rbx
js     11d0 <ffu4fr4+0xd0>
xorps  %xmm0,%xmm0
cvtsi2ss %rbx,%xmm0
jmp    11e8 <ffu4fr4+0xe8>
nopw   0x0(%rax,%rax,1)
mov    %rbx,%r14
shr    %r14
and    $0x1,%ebx
or     %r14,%rbx
xorps  %xmm0,%xmm0
cvtsi2ss %rbx,%xmm0
addss  %xmm0,%xmm0
pshufd $0xee,%xmm1,%xmm1
movq   %xmm1,%rbx
test   %rbx,%rbx
jns    1190 <ffu4fr4+0x90>
mov    %rbx,%r14
shr    %r14
and    $0x1,%ebx
or     %r14,%rbx
xorps  %xmm1,%xmm1
cvtsi2ss %rbx,%xmm1
addss  %xmm1,%xmm1
jmp    1198 <ffu4fr4+0x98>
mov    %rsi,%rax
and    $0xfffffffffffffffe,%rax
movapd %xmm1,%xmm2
unpcklpd %xmm1,%xmm2
movapd %xmm0,%xmm3
unpcklpd %xmm0,%xmm3
lea    -0x2(%rax),%rbx
mov    %rbx,%r9
shr    %r9
add    $0x1,%r9
test   %rbx,%rbx
je     15f8 <ffu4fr4+0x4f8>
mov    %r9,%r10
and    $0xfffffffffffffffe,%r10
xor    %r8d,%r8d
movdqa 0xdbe(%rip),%xmm8
movdqa 0xdc5(%rip),%xmm9
movdqa 0xdcd(%rip),%xmm6
movapd 0xdd5(%rip),%xmm7
nopl   0x0(%rax,%rax,1)
movdqu (%rdi,%r8,8),%xmm4
movdqa %xmm4,%xmm5
pand   %xmm8,%xmm5
por    %xmm9,%xmm5
psrlq  $0x20,%xmm4
por    %xmm6,%xmm4
subpd  %xmm7,%xmm4
addpd  %xmm5,%xmm4
subpd  %xmm2,%xmm4
divpd  %xmm3,%xmm4
cvtpd2ps %xmm4,%xmm4
movlpd %xmm4,(%rdx,%r8,4)
movdqu 0x10(%rdi,%r8,8),%xmm4
movdqa %xmm4,%xmm5
pand   %xmm8,%xmm5
por    %xmm9,%xmm5
psrlq  $0x20,%xmm4
por    %xmm6,%xmm4
subpd  %xmm7,%xmm4
addpd  %xmm5,%xmm4
subpd  %xmm2,%xmm4
divpd  %xmm3,%xmm4
cvtpd2ps %xmm4,%xmm4
movlpd %xmm4,0x8(%rdx,%r8,4)
add    $0x4,%r8
add    $0xfffffffffffffffe,%r10
jne    1270 <ffu4fr4+0x170>
test   $0x1,%r9b
je     1335 <ffu4fr4+0x235>
movdqu (%rdi,%r8,8),%xmm4
movdqa 0xd12(%rip),%xmm5
pand   %xmm4,%xmm5
por    0xd16(%rip),%xmm5
psrlq  $0x20,%xmm4
por    0xd19(%rip),%xmm4
subpd  0xd21(%rip),%xmm4
addpd  %xmm5,%xmm4
subpd  %xmm2,%xmm4
divpd  %xmm3,%xmm4
cvtpd2ps %xmm4,%xmm2
movlpd %xmm2,(%rdx,%r8,4)
cmp    %rsi,%rax
je     138c <ffu4fr4+0x28c>
movapd 0xd0e(%rip),%xmm2
movapd 0xd16(%rip),%xmm3
nopw   0x0(%rax,%rax,1)
movsd  (%rdi,%rax,8),%xmm4
unpcklps %xmm2,%xmm4
subpd  %xmm3,%xmm4
movapd %xmm4,%xmm5
unpckhpd %xmm4,%xmm5
addsd  %xmm4,%xmm5
subsd  %xmm1,%xmm5
divsd  %xmm0,%xmm5
xorps  %xmm4,%xmm4
cvtsd2ss %xmm5,%xmm4
movss  %xmm4,(%rdx,%rax,4)
add    $0x1,%rax
cmp    %rax,%rsi
jne    1350 <ffu4fr4+0x250>
jmp    138c <ffu4fr4+0x28c>
cmp    %rsi,%r11
jne    13b7 <ffu4fr4+0x2b7>
mov    (%rcx),%eax
pop    %rbx
pop    %r14
ret
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
movss  %xmm0,(%rdx,%r11,4)
add    $0x1,%r11
cmp    %r11,%rsi
je     138c <ffu4fr4+0x28c>
mov    (%rdi,%r11,8),%rax
test   %rax,%rax
jns    13a0 <ffu4fr4+0x2a0>
mov    %rax,%rbx
shr    %rbx
and    $0x1,%eax
or     %rbx,%rax
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
addss  %xmm0,%xmm0
jmp    13a8 <ffu4fr4+0x2a8>
and    $0xfffffffffffffffc,%r9
xor    %r10d,%r10d
jmp    140f <ffu4fr4+0x30f>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xorps  %xmm1,%xmm1
cvtsi2ss %rax,%xmm1
unpcklps %xmm1,%xmm0
movlps %xmm0,0x18(%rdx,%r10,4)
add    $0x8,%r10
add    $0xfffffffffffffffc,%r9
je     1175 <ffu4fr4+0x75>
movdqu (%rdi,%r10,8),%xmm1
movq   %xmm1,%rax
test   %rax,%rax
js     1430 <ffu4fr4+0x330>
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
jmp    1448 <ffu4fr4+0x348>
nopl   0x0(%rax)
mov    %rax,%rbx
shr    %rbx
and    $0x1,%eax
or     %rbx,%rax
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
addss  %xmm0,%xmm0
pshufd $0xee,%xmm1,%xmm1
movq   %xmm1,%rax
test   %rax,%rax
js     1470 <ffu4fr4+0x370>
xorps  %xmm1,%xmm1
cvtsi2ss %rax,%xmm1
jmp    1488 <ffu4fr4+0x388>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rax,%rbx
shr    %rbx
and    $0x1,%eax
or     %rbx,%rax
xorps  %xmm1,%xmm1
cvtsi2ss %rax,%xmm1
addss  %xmm1,%xmm1
unpcklps %xmm1,%xmm0
movlps %xmm0,(%rdx,%r10,4)
movdqu 0x10(%rdi,%r10,8),%xmm1
movq   %xmm1,%rax
test   %rax,%rax
js     14b0 <ffu4fr4+0x3b0>
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
jmp    14c8 <ffu4fr4+0x3c8>
nopl   0x0(%rax,%rax,1)
mov    %rax,%rbx
shr    %rbx
and    $0x1,%eax
or     %rbx,%rax
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
addss  %xmm0,%xmm0
pshufd $0xee,%xmm1,%xmm1
movq   %xmm1,%rax
test   %rax,%rax
js     14f0 <ffu4fr4+0x3f0>
xorps  %xmm1,%xmm1
cvtsi2ss %rax,%xmm1
jmp    1508 <ffu4fr4+0x408>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rax,%rbx
shr    %rbx
and    $0x1,%eax
or     %rbx,%rax
xorps  %xmm1,%xmm1
cvtsi2ss %rax,%xmm1
addss  %xmm1,%xmm1
unpcklps %xmm1,%xmm0
movlps %xmm0,0x8(%rdx,%r10,4)
movdqu 0x20(%rdi,%r10,8),%xmm1
movq   %xmm1,%rax
test   %rax,%rax
js     1530 <ffu4fr4+0x430>
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
jmp    1548 <ffu4fr4+0x448>
nopl   0x0(%rax)
mov    %rax,%rbx
shr    %rbx
and    $0x1,%eax
or     %rbx,%rax
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
addss  %xmm0,%xmm0
pshufd $0xee,%xmm1,%xmm1
movq   %xmm1,%rax
test   %rax,%rax
js     1570 <ffu4fr4+0x470>
xorps  %xmm1,%xmm1
cvtsi2ss %rax,%xmm1
jmp    1588 <ffu4fr4+0x488>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rax,%rbx
shr    %rbx
and    $0x1,%eax
or     %rbx,%rax
xorps  %xmm1,%xmm1
cvtsi2ss %rax,%xmm1
addss  %xmm1,%xmm1
unpcklps %xmm1,%xmm0
movlps %xmm0,0x10(%rdx,%r10,4)
movdqu 0x30(%rdi,%r10,8),%xmm1
movq   %xmm1,%rax
test   %rax,%rax
js     15b0 <ffu4fr4+0x4b0>
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
jmp    15c8 <ffu4fr4+0x4c8>
nopl   0x0(%rax)
mov    %rax,%rbx
shr    %rbx
and    $0x1,%eax
or     %rbx,%rax
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
addss  %xmm0,%xmm0
pshufd $0xee,%xmm1,%xmm1
movq   %xmm1,%rax
test   %rax,%rax
jns    13f0 <ffu4fr4+0x2f0>
mov    %rax,%rbx
shr    %rbx
and    $0x1,%eax
or     %rbx,%rax
xorps  %xmm1,%xmm1
cvtsi2ss %rax,%xmm1
addss  %xmm1,%xmm1
jmp    13f8 <ffu4fr4+0x2f8>
xor    %r8d,%r8d
test   $0x1,%r9b
jne    12f0 <ffu4fr4+0x1f0>
jmp    1335 <ffu4fr4+0x235>

LLVM IR (-O0):
define i32 @ffu4fr4(i64* %0, i64 %1, double %2, double %3, float* %4, i32* %5) {
%7 = alloca i64*
%8 = alloca i64
%9 = alloca double
%10 = alloca double
%11 = alloca float*
%12 = alloca i32*
%13 = alloca i64
store i64* %0, i64** %7
store i64 %1, i64* %8
store double %2, double* %9
store double %3, double* %10
store float* %4, float** %11
store i32* %5, i32** %12
%14 = load double, double* %9
%15 = fcmp oeq double %14, 1.000000e+00
br i1 %15, label %16, label %37
16: ; preds = %6
%17 = load double, double* %10
%18 = fcmp oeq double %17, 0.000000e+00
br i1 %18, label %19, label %37
19: ; preds = %16
store i64 0, i64* %13
br label %20
20: ; preds = %33, %19
%21 = load i64, i64* %13
%22 = load i64, i64* %8
%23 = icmp slt i64 %21, %22
br i1 %23, label %24, label %36
24: ; preds = %20
%25 = load i64*, i64** %7
%26 = load i64, i64* %13
%27 = getelementptr inbounds i64, i64* %25, i64 %26
%28 = load i64, i64* %27
%29 = uitofp i64 %28 to float
%30 = load float*, float** %11
%31 = load i64, i64* %13
%32 = getelementptr inbounds float, float* %30, i64 %31
store float %29, float* %32
br label %33
33: ; preds = %24
%34 = load i64, i64* %13
%35 = add nsw i64 %34, 1
store i64 %35, i64* %13
br label %20
36: ; preds = %20
br label %60
37: ; preds = %16, %6
store i64 0, i64* %13
br label %38
38: ; preds = %56, %37
%39 = load i64, i64* %13
%40 = load i64, i64* %8
%41 = icmp slt i64 %39, %40
br i1 %41, label %42, label %59
42: ; preds = %38
%43 = load i64*, i64** %7
%44 = load i64, i64* %13
%45 = getelementptr inbounds i64, i64* %43, i64 %44
%46 = load i64, i64* %45
%47 = uitofp i64 %46 to double
%48 = load double, double* %10
%49 = fsub double %47, %48
%50 = load double, double* %9
%51 = fdiv double %49, %50
%52 = fptrunc double %51 to float
%53 = load float*, float** %11
%54 = load i64, i64* %13
%55 = getelementptr inbounds float, float* %53, i64 %54
store float %52, float* %55
br label %56
56: ; preds = %42
%57 = load i64, i64* %13
%58 = add nsw i64 %57, 1
store i64 %58, i64* %13
br label %38
59: ; preds = %38
br label %60
60: ; preds = %59, %36
%61 = load i32*, i32** %12
%62 = load i32, i32* %61
ret i32 %62
}

LLVM IR (-O2):
define i32 @ffu4fr4(i64* nocapture %0, i64 %1, double %2, double %3, float* nocapture writeonly %4, i32* nocapture %5) {
%7 = fcmp oeq double %2, 1.000000e+00
%8 = fcmp oeq double %3, 0.000000e+00
%9 = and i1 %7, %8
%10 = icmp sgt i64 %1, 0
br i1 %9, label %69, label %11
11: ; preds = %6
br i1 %10, label %12, label %152
12: ; preds = %11
%13 = icmp eq i64 %1, 1
br i1 %13, label %67, label %14
14: ; preds = %12
%15 = and i64 %1, -2
%16 = insertelement <2 x double> poison, double %3, i64 0
%17 = shufflevector <2 x double> %16, <2 x double> poison, <2 x i32> zeroinitializer
%18 = insertelement <2 x double> poison, double %2, i64 0
%19 = shufflevector <2 x double> %18, <2 x double> poison, <2 x i32> zeroinitializer
%20 = add i64 %15, -2
%21 = lshr exact i64 %20, 1
%22 = add nuw i64 %21, 1
%23 = and i64 %22, 1
%24 = icmp eq i64 %20, 0
br i1 %24, label %52, label %25
25: ; preds = %14
%26 = and i64 %22, -2
br label %27
27: ; preds = %27, %25
%28 = phi i64 [ 0, %25 ], [ %49, %27 ]
%29 = phi i64 [ 0, %25 ], [ %50, %27 ]
%30 = getelementptr inbounds i64, i64* %0, i64 %28
%31 = bitcast i64* %30 to <2 x i64>*
%32 = load <2 x i64>, <2 x i64>* %31
%33 = uitofp <2 x i64> %32 to <2 x double>
%34 = fsub <2 x double> %33, %17
%35 = fdiv <2 x double> %34, %19
%36 = fptrunc <2 x double> %35 to <2 x float>
%37 = getelementptr inbounds float, float* %4, i64 %28
%38 = bitcast float* %37 to <2 x float>*
store <2 x float> %36, <2 x float>* %38
%39 = or i64 %28, 2
%40 = getelementptr inbounds i64, i64* %0, i64 %39
%41 = bitcast i64* %40 to <2 x i64>*
%42 = load <2 x i64>, <2 x i64>* %41
%43 = uitofp <2 x i64> %42 to <2 x double>
%44 = fsub <2 x double> %43, %17
%45 = fdiv <2 x double> %44, %19
%46 = fptrunc <2 x double> %45 to <2 x float>
%47 = getelementptr inbounds float, float* %4, i64 %39
%48 = bitcast float* %47 to <2 x float>*
store <2 x float> %46, <2 x float>* %48
%49 = add nuw i64 %28, 4
%50 = add nuw i64 %29, 2
%51 = icmp eq i64 %50, %26
br i1 %51, label %52, label %27
52: ; preds = %27, %14
%53 = phi i64 [ 0, %14 ], [ %49, %27 ]
%54 = icmp eq i64 %23, 0
br i1 %54, label %65, label %55
55: ; preds = %52
%56 = getelementptr inbounds i64, i64* %0, i64 %53
%57 = bitcast i64* %56 to <2 x i64>*
%58 = load <2 x i64>, <2 x i64>* %57
%59 = uitofp <2 x i64> %58 to <2 x double>
%60 = fsub <2 x double> %59, %17
%61 = fdiv <2 x double> %60, %19
%62 = fptrunc <2 x double> %61 to <2 x float>
%63 = getelementptr inbounds float, float* %4, i64 %53
%64 = bitcast float* %63 to <2 x float>*
store <2 x float> %62, <2 x float>* %64
br label %65
65: ; preds = %52, %55
%66 = icmp eq i64 %15, %1
br i1 %66, label %152, label %67
67: ; preds = %12, %65
%68 = phi i64 [ 0, %12 ], [ %15, %65 ]
br label %141
69: ; preds = %6
br i1 %10, label %70, label %152
70: ; preds = %69
%71 = icmp eq i64 %1, 1
br i1 %71, label %131, label %72
72: ; preds = %70
%73 = and i64 %1, -2
%74 = add i64 %73, -2
%75 = lshr exact i64 %74, 1
%76 = add nuw i64 %75, 1
%77 = and i64 %76, 3
%78 = icmp ult i64 %74, 6
br i1 %78, label %114, label %79
79: ; preds = %72
%80 = and i64 %76, -4
br label %81
81: ; preds = %81, %79
%82 = phi i64 [ 0, %79 ], [ %111, %81 ]
%83 = phi i64 [ 0, %79 ], [ %112, %81 ]
%84 = getelementptr inbounds i64, i64* %0, i64 %82
%85 = bitcast i64* %84 to <2 x i64>*
%86 = load <2 x i64>, <2 x i64>* %85
%87 = uitofp <2 x i64> %86 to <2 x float>
%88 = getelementptr inbounds float, float* %4, i64 %82
%89 = bitcast float* %88 to <2 x float>*
store <2 x float> %87, <2 x float>* %89
%90 = or i64 %82, 2
%91 = getelementptr inbounds i64, i64* %0, i64 %90
%92 = bitcast i64* %91 to <2 x i64>*
%93 = load <2 x i64>, <2 x i64>* %92
%94 = uitofp <2 x i64> %93 to <2 x float>
%95 = getelementptr inbounds float, float* %4, i64 %90
%96 = bitcast float* %95 to <2 x float>*
store <2 x float> %94, <2 x float>* %96
%97 = or i64 %82, 4
%98 = getelementptr inbounds i64, i64* %0, i64 %97
%99 = bitcast i64* %98 to <2 x i64>*
%100 = load <2 x i64>, <2 x i64>* %99
%101 = uitofp <2 x i64> %100 to <2 x float>
%102 = getelementptr inbounds float, float* %4, i64 %97
%103 = bitcast float* %102 to <2 x float>*
store <2 x float> %101, <2 x float>* %103
%104 = or i64 %82, 6
%105 = getelementptr inbounds i64, i64* %0, i64 %104
%106 = bitcast i64* %105 to <2 x i64>*
%107 = load <2 x i64>, <2 x i64>* %106
%108 = uitofp <2 x i64> %107 to <2 x float>
%109 = getelementptr inbounds float, float* %4, i64 %104
%110 = bitcast float* %109 to <2 x float>*
store <2 x float> %108, <2 x float>* %110
%111 = add nuw i64 %82, 8
%112 = add i64 %83, 4
%113 = icmp eq i64 %112, %80
br i1 %113, label %114, label %81
114: ; preds = %81, %72
%115 = phi i64 [ 0, %72 ], [ %111, %81 ]
%116 = icmp eq i64 %77, 0
br i1 %116, label %129, label %117
117: ; preds = %114, %117
%118 = phi i64 [ %126, %117 ], [ %115, %114 ]
%119 = phi i64 [ %127, %117 ], [ 0, %114 ]
%120 = getelementptr inbounds i64, i64* %0, i64 %118
%121 = bitcast i64* %120 to <2 x i64>*
%122 = load <2 x i64>, <2 x i64>* %121
%123 = uitofp <2 x i64> %122 to <2 x float>
%124 = getelementptr inbounds float, float* %4, i64 %118
%125 = bitcast float* %124 to <2 x float>*
store <2 x float> %123, <2 x float>* %125
%126 = add nuw i64 %118, 2
%127 = add i64 %119, 1
%128 = icmp eq i64 %127, %77
br i1 %128, label %129, label %117
129: ; preds = %117, %114
%130 = icmp eq i64 %73, %1
br i1 %130, label %152, label %131
131: ; preds = %70, %129
%132 = phi i64 [ 0, %70 ], [ %73, %129 ]
br label %133
133: ; preds = %131, %133
%134 = phi i64 [ %139, %133 ], [ %132, %131 ]
%135 = getelementptr inbounds i64, i64* %0, i64 %134
%136 = load i64, i64* %135
%137 = uitofp i64 %136 to float
%138 = getelementptr inbounds float, float* %4, i64 %134
store float %137, float* %138
%139 = add nuw nsw i64 %134, 1
%140 = icmp eq i64 %139, %1
br i1 %140, label %152, label %133
141: ; preds = %67, %141
%142 = phi i64 [ %150, %141 ], [ %68, %67 ]
%143 = getelementptr inbounds i64, i64* %0, i64 %142
%144 = load i64, i64* %143
%145 = uitofp i64 %144 to double
%146 = fsub double %145, %3
%147 = fdiv double %146, %2
%148 = fptrunc double %147 to float
%149 = getelementptr inbounds float, float* %4, i64 %142
store float %148, float* %149
%150 = add nuw nsw i64 %142, 1
%151 = icmp eq i64 %150, %1
br i1 %151, label %152, label %141
152: ; preds = %141, %133, %65, %129, %11, %69
%153 = load i32, i32* %5
ret i32 %153
}