void achtsr(v1, v2, npix, direction, hasscale, dirale, bzero) short *v1;
float *v2;
int npix;
int direction;
int hasscale;
double dirale;
double bzero;
{
  if (hasscale) {
    if (direction) {
      while (npix--)
        v1[npix] = v2[npix] * dirale + bzero;
    } else {
      while (npix--)
        v1[npix] = (v2[npix] - bzero) / dirale;
    }
  } else {
    while (npix--)
      v1[npix] = v2[npix];
  }
}


x86 assembly (clang, -O0):
<achtsr>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
movsd  %xmm0,-0x28(%rbp)
movsd  %xmm1,-0x30(%rbp)
cmpl   $0x0,-0x1c(%rbp)
je     11eb <achtsr+0xeb>
cmpl   $0x0,-0x18(%rbp)
je     118d <achtsr+0x8d>
jmp    1139 <achtsr+0x39>
mov    -0x14(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x14(%rbp)
cmp    $0x0,%eax
je     1188 <achtsr+0x88>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %ax,%dx
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
jmp    1139 <achtsr+0x39>
jmp    11e6 <achtsr+0xe6>
jmp    1192 <achtsr+0x92>
mov    -0x14(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x14(%rbp)
cmp    $0x0,%eax
je     11e1 <achtsr+0xe1>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  -0x30(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %ax,%dx
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
jmp    1192 <achtsr+0x92>
jmp    11e6 <achtsr+0xe6>
jmp    122e <achtsr+0x12e>
jmp    11f0 <achtsr+0xf0>
mov    -0x14(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x14(%rbp)
cmp    $0x0,%eax
je     1229 <achtsr+0x129>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvttss2si %xmm0,%eax
mov    %ax,%dx
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
jmp    11f0 <achtsr+0xf0>
jmp    122e <achtsr+0x12e>
pop    %rbp
ret

x86 assembly (clang, -O2):
<achtsr>:
push   %rbx
test   %r8d,%r8d
je     128b <achtsr+0x18b>
test   %ecx,%ecx
je     13db <achtsr+0x2db>
test   %edx,%edx
je     14a6 <achtsr+0x3a6>
movslq %edx,%rax
add    $0xffffffff,%edx
cmp    $0x3,%edx
jb     1260 <achtsr+0x160>
add    $0x1,%rdx
mov    %rdx,%r8
and    $0xfffffffffffffffc,%r8
movapd %xmm0,%xmm2
unpcklpd %xmm0,%xmm2
movapd %xmm1,%xmm3
unpcklpd %xmm1,%xmm3
lea    -0x4(%r8),%rcx
mov    %rcx,%r9
shr    $0x2,%r9
add    $0x1,%r9
test   %rcx,%rcx
je     14a8 <achtsr+0x3a8>
mov    %r9,%r10
and    $0xfffffffffffffffe,%r10
lea    (%rdi,%rax,2),%r11
lea    (%rsi,%rax,4),%rbx
mov    $0xfffffffffffffffc,%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movups (%rbx,%rcx,4),%xmm4
shufps $0x1b,%xmm4,%xmm4
cvtps2pd %xmm4,%xmm5
movhlps %xmm4,%xmm4
cvtps2pd %xmm4,%xmm4
mulpd  %xmm2,%xmm4
mulpd  %xmm2,%xmm5
addpd  %xmm3,%xmm5
cvttpd2dq %xmm5,%xmm5
addpd  %xmm3,%xmm4
cvttpd2dq %xmm4,%xmm4
unpcklpd %xmm4,%xmm5
packssdw %xmm5,%xmm5
pshuflw $0x1b,%xmm5,%xmm4
movq   %xmm4,(%r11,%rcx,2)
movups -0x10(%rbx,%rcx,4),%xmm4
shufps $0x1b,%xmm4,%xmm4
cvtps2pd %xmm4,%xmm5
movhlps %xmm4,%xmm4
cvtps2pd %xmm4,%xmm4
mulpd  %xmm2,%xmm4
addpd  %xmm3,%xmm4
mulpd  %xmm2,%xmm5
addpd  %xmm3,%xmm5
cvttpd2dq %xmm5,%xmm5
cvttpd2dq %xmm4,%xmm4
unpcklpd %xmm4,%xmm5
packssdw %xmm5,%xmm5
pshuflw $0x1b,%xmm5,%xmm4
movq   %xmm4,-0x8(%r11,%rcx,2)
add    $0xfffffffffffffff8,%rcx
add    $0xfffffffffffffffe,%r10
jne    1180 <achtsr+0x80>
add    $0x3,%rcx
test   $0x1,%r9b
je     1252 <achtsr+0x152>
add    %rax,%rcx
movups -0xc(%rsi,%rcx,4),%xmm4
shufps $0x1b,%xmm4,%xmm4
cvtps2pd %xmm4,%xmm5
movhlps %xmm4,%xmm4
cvtps2pd %xmm4,%xmm4
mulpd  %xmm2,%xmm4
addpd  %xmm3,%xmm4
mulpd  %xmm2,%xmm5
addpd  %xmm3,%xmm5
cvttpd2dq %xmm5,%xmm2
cvttpd2dq %xmm4,%xmm3
unpcklpd %xmm3,%xmm2
packssdw %xmm2,%xmm2
pshuflw $0x1b,%xmm2,%xmm2
movq   %xmm2,-0x6(%rdi,%rcx,2)
cmp    %r8,%rdx
je     14a6 <achtsr+0x3a6>
sub    %r8,%rax
xchg   %ax,%ax
movss  -0x4(%rsi,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm1,%xmm2
cvttsd2si %xmm2,%ecx
mov    %cx,-0x2(%rdi,%rax,2)
lea    -0x1(%rax),%rcx
mov    %rcx,%rax
test   %ecx,%ecx
jne    1260 <achtsr+0x160>
jmp    14a6 <achtsr+0x3a6>
test   %edx,%edx
je     14a6 <achtsr+0x3a6>
movslq %edx,%rax
add    $0xffffffff,%edx
cmp    $0x7,%edx
jb     13c0 <achtsr+0x2c0>
add    $0x1,%rdx
movabs $0x1fffffffc,%r8
add    $0xfffffffffffffffc,%r8
and    %rdx,%r8
lea    -0x8(%r8),%rcx
mov    %rcx,%r9
shr    $0x3,%r9
add    $0x1,%r9
test   %rcx,%rcx
je     14be <achtsr+0x3be>
mov    %r9,%rbx
and    $0xfffffffffffffffe,%rbx
lea    (%rdi,%rax,2),%r10
add    $0xfffffffffffffff8,%r10
lea    (%rsi,%rax,4),%r11
add    $0xfffffffffffffff0,%r11
mov    $0xfffffffffffffffc,%rcx
nopl   (%rax)
movups (%r11,%rcx,4),%xmm0
movups 0x10(%r11,%rcx,4),%xmm1
shufps $0x1b,%xmm1,%xmm1
shufps $0x1b,%xmm0,%xmm0
cvttps2dq %xmm1,%xmm1
packssdw %xmm1,%xmm1
cvttps2dq %xmm0,%xmm0
packssdw %xmm0,%xmm0
pshuflw $0x1b,%xmm1,%xmm1
pshuflw $0x1b,%xmm0,%xmm0
punpcklqdq %xmm1,%xmm0
movdqu %xmm0,(%r10,%rcx,2)
movups -0x20(%r11,%rcx,4),%xmm0
movups -0x10(%r11,%rcx,4),%xmm1
shufps $0x1b,%xmm1,%xmm1
shufps $0x1b,%xmm0,%xmm0
cvttps2dq %xmm1,%xmm1
packssdw %xmm1,%xmm1
cvttps2dq %xmm0,%xmm0
packssdw %xmm0,%xmm0
pshuflw $0x1b,%xmm1,%xmm1
pshuflw $0x1b,%xmm0,%xmm0
punpcklqdq %xmm1,%xmm0
movdqu %xmm0,-0x10(%r10,%rcx,2)
add    $0xfffffffffffffff0,%rcx
add    $0xfffffffffffffffe,%rbx
jne    12f0 <achtsr+0x1f0>
add    $0x3,%rcx
test   $0x1,%r9b
je     13ad <achtsr+0x2ad>
add    %rax,%rcx
movups -0x1c(%rsi,%rcx,4),%xmm0
movups -0xc(%rsi,%rcx,4),%xmm1
shufps $0x1b,%xmm1,%xmm1
shufps $0x1b,%xmm0,%xmm0
cvttps2dq %xmm1,%xmm1
cvttps2dq %xmm0,%xmm0
packssdw %xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
packssdw %xmm0,%xmm0
pshuflw $0x1b,%xmm0,%xmm0
punpcklqdq %xmm1,%xmm0
movdqu %xmm0,-0xe(%rdi,%rcx,2)
cmp    %r8,%rdx
je     14a6 <achtsr+0x3a6>
sub    %r8,%rax
nopl   0x0(%rax)
cvttss2si -0x4(%rsi,%rax,4),%ecx
mov    %cx,-0x2(%rdi,%rax,2)
lea    -0x1(%rax),%rcx
mov    %rcx,%rax
test   %ecx,%ecx
jne    13c0 <achtsr+0x2c0>
jmp    14a6 <achtsr+0x3a6>
test   %edx,%edx
je     14a6 <achtsr+0x3a6>
movslq %edx,%rcx
add    $0xffffffff,%edx
cmp    $0x3,%edx
jae    13f6 <achtsr+0x2f6>
mov    %rcx,%rax
jmp    1480 <achtsr+0x380>
add    $0x1,%rdx
mov    %rdx,%r8
and    $0xfffffffffffffffc,%r8
mov    %rcx,%rax
sub    %r8,%rax
movapd %xmm1,%xmm2
unpcklpd %xmm1,%xmm2
movapd %xmm0,%xmm3
unpcklpd %xmm0,%xmm3
lea    (%rdi,%rcx,2),%r9
add    $0xfffffffffffffff8,%r9
lea    (%rsi,%rcx,4),%r10
add    $0xfffffffffffffff0,%r10
mov    %r8,%rbx
neg    %rbx
xor    %ecx,%ecx
nop
movups (%r10,%rcx,4),%xmm4
shufps $0x1b,%xmm4,%xmm4
cvtps2pd %xmm4,%xmm5
movhlps %xmm4,%xmm4
cvtps2pd %xmm4,%xmm4
subpd  %xmm2,%xmm5
subpd  %xmm2,%xmm4
divpd  %xmm3,%xmm4
divpd  %xmm3,%xmm5
cvttpd2dq %xmm5,%xmm5
cvttpd2dq %xmm4,%xmm4
unpcklpd %xmm4,%xmm5
packssdw %xmm5,%xmm5
pshuflw $0x1b,%xmm5,%xmm4
movq   %xmm4,(%r9,%rcx,2)
add    $0xfffffffffffffffc,%rcx
cmp    %rcx,%rbx
jne    1430 <achtsr+0x330>
cmp    %r8,%rdx
je     14a6 <achtsr+0x3a6>
nopl   0x0(%rax,%rax,1)
movss  -0x4(%rsi,%rax,4),%xmm2
cvtss2sd %xmm2,%xmm2
subsd  %xmm1,%xmm2
divsd  %xmm0,%xmm2
cvttsd2si %xmm2,%ecx
mov    %cx,-0x2(%rdi,%rax,2)
lea    -0x1(%rax),%rcx
mov    %rcx,%rax
test   %ecx,%ecx
jne    1480 <achtsr+0x380>
pop    %rbx
ret
mov    $0xffffffffffffffff,%rcx
test   $0x1,%r9b
jne    1212 <achtsr+0x112>
jmp    1252 <achtsr+0x152>
mov    $0xffffffffffffffff,%rcx
test   $0x1,%r9b
jne    1374 <achtsr+0x274>
jmp    13ad <achtsr+0x2ad>

LLVM IR (-O0):
define void @achtsr(i16* %0, float* %1, i32 %2, i32 %3, i32 %4, double %5, double %6) {
%8 = alloca i16*
%9 = alloca float*
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca double
%14 = alloca double
store i16* %0, i16** %8
store float* %1, float** %9
store i32 %2, i32* %10
store i32 %3, i32* %11
store i32 %4, i32* %12
store double %5, double* %13
store double %6, double* %14
%15 = load i32, i32* %12
%16 = icmp ne i32 %15, 0
br i1 %16, label %17, label %64
17: ; preds = %7
%18 = load i32, i32* %11
%19 = icmp ne i32 %18, 0
br i1 %19, label %20, label %41
20: ; preds = %17
br label %21
21: ; preds = %25, %20
%22 = load i32, i32* %10
%23 = add nsw i32 %22, -1
store i32 %23, i32* %10
%24 = icmp ne i32 %22, 0
br i1 %24, label %25, label %40
25: ; preds = %21
%26 = load float*, float** %9
%27 = load i32, i32* %10
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds float, float* %26, i64 %28
%30 = load float, float* %29
%31 = fpext float %30 to double
%32 = load double, double* %13
%33 = load double, double* %14
%34 = call double @llvm.fmuladd.f64(double %31, double %32, double %33)
%35 = fptosi double %34 to i16
%36 = load i16*, i16** %8
%37 = load i32, i32* %10
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i16, i16* %36, i64 %38
store i16 %35, i16* %39
br label %21
40: ; preds = %21
br label %63
41: ; preds = %17
br label %42
42: ; preds = %46, %41
%43 = load i32, i32* %10
%44 = add nsw i32 %43, -1
store i32 %44, i32* %10
%45 = icmp ne i32 %43, 0
br i1 %45, label %46, label %62
46: ; preds = %42
%47 = load float*, float** %9
%48 = load i32, i32* %10
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds float, float* %47, i64 %49
%51 = load float, float* %50
%52 = fpext float %51 to double
%53 = load double, double* %14
%54 = fsub double %52, %53
%55 = load double, double* %13
%56 = fdiv double %54, %55
%57 = fptosi double %56 to i16
%58 = load i16*, i16** %8
%59 = load i32, i32* %10
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds i16, i16* %58, i64 %60
store i16 %57, i16* %61
br label %42
62: ; preds = %42
br label %63
63: ; preds = %62, %40
br label %81
64: ; preds = %7
br label %65
65: ; preds = %69, %64
%66 = load i32, i32* %10
%67 = add nsw i32 %66, -1
store i32 %67, i32* %10
%68 = icmp ne i32 %66, 0
br i1 %68, label %69, label %80
69: ; preds = %65
%70 = load float*, float** %9
%71 = load i32, i32* %10
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds float, float* %70, i64 %72
%74 = load float, float* %73
%75 = fptosi float %74 to i16
%76 = load i16*, i16** %8
%77 = load i32, i32* %10
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds i16, i16* %76, i64 %78
store i16 %75, i16* %79
br label %65
80: ; preds = %65
br label %81
81: ; preds = %80, %63
ret void
}

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