void achtis(v1, v2, npix, direction, hasscale, dirale, bzero) int *v1;
short *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):
<achtis>:
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     11d9 <achtis+0xd9>
cmpl   $0x0,-0x18(%rbp)
je     1188 <achtis+0x88>
jmp    1139 <achtis+0x39>
mov    -0x14(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x14(%rbp)
cmp    $0x0,%eax
je     1183 <achtis+0x83>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
cvtsi2sd %eax,%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%edx
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1139 <achtis+0x39>
jmp    11d4 <achtis+0xd4>
jmp    118d <achtis+0x8d>
mov    -0x14(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x14(%rbp)
cmp    $0x0,%eax
je     11cf <achtis+0xcf>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
cvtsi2sd %eax,%xmm0
subsd  -0x30(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
cvttsd2si %xmm0,%edx
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    118d <achtis+0x8d>
jmp    11d4 <achtis+0xd4>
jmp    1213 <achtis+0x113>
jmp    11de <achtis+0xde>
mov    -0x14(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x14(%rbp)
cmp    $0x0,%eax
je     120e <achtis+0x10e>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movswl (%rax,%rcx,2),%edx
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    11de <achtis+0xde>
jmp    1213 <achtis+0x113>
pop    %rbp
ret

x86 assembly (clang, -O2):
<achtis>:
push   %rbx
test   %r8d,%r8d
je     12ac <achtis+0x1ac>
test   %ecx,%ecx
je     1439 <achtis+0x339>
test   %edx,%edx
je     1517 <achtis+0x417>
movslq %edx,%rax
add    $0xffffffff,%edx
cmp    $0x3,%edx
jb     1280 <achtis+0x180>
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     1519 <achtis+0x419>
mov    %r9,%r10
and    $0xfffffffffffffffe,%r10
lea    (%rdi,%rax,4),%r11
lea    (%rsi,%rax,2),%rbx
mov    $0xfffffffffffffffc,%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movq   (%rbx,%rcx,2),%xmm4
pshufd $0xc4,%xmm4,%xmm4
pshuflw $0xac,%xmm4,%xmm4
pshufhw $0x24,%xmm4,%xmm4
psrad  $0x10,%xmm4
cvtdq2pd %xmm4,%xmm5
pshufd $0xee,%xmm4,%xmm4
cvtdq2pd %xmm4,%xmm4
mulpd  %xmm2,%xmm4
mulpd  %xmm2,%xmm5
addpd  %xmm3,%xmm5
cvttpd2dq %xmm5,%xmm5
addpd  %xmm3,%xmm4
cvttpd2dq %xmm4,%xmm4
shufps $0x11,%xmm5,%xmm4
movups %xmm4,(%r11,%rcx,4)
movq   -0x8(%rbx,%rcx,2),%xmm4
pshufd $0xc4,%xmm4,%xmm4
pshuflw $0xac,%xmm4,%xmm4
pshufhw $0x24,%xmm4,%xmm4
psrad  $0x10,%xmm4
cvtdq2pd %xmm4,%xmm5
pshufd $0xee,%xmm4,%xmm4
cvtdq2pd %xmm4,%xmm4
mulpd  %xmm2,%xmm4
addpd  %xmm3,%xmm4
mulpd  %xmm2,%xmm5
addpd  %xmm3,%xmm5
cvttpd2dq %xmm5,%xmm5
cvttpd2dq %xmm4,%xmm4
shufps $0x11,%xmm5,%xmm4
movups %xmm4,-0x10(%r11,%rcx,4)
add    $0xfffffffffffffff8,%rcx
add    $0xfffffffffffffffe,%r10
jne    1180 <achtis+0x80>
add    $0x3,%rcx
test   $0x1,%r9b
je     1273 <achtis+0x173>
add    %rax,%rcx
movq   -0x6(%rsi,%rcx,2),%xmm4
pshufd $0xc4,%xmm4,%xmm4
pshuflw $0xac,%xmm4,%xmm4
pshufhw $0x24,%xmm4,%xmm4
psrad  $0x10,%xmm4
cvtdq2pd %xmm4,%xmm5
pshufd $0xee,%xmm4,%xmm4
cvtdq2pd %xmm4,%xmm4
mulpd  %xmm2,%xmm4
addpd  %xmm3,%xmm4
mulpd  %xmm2,%xmm5
addpd  %xmm3,%xmm5
cvttpd2dq %xmm5,%xmm2
cvttpd2dq %xmm4,%xmm3
shufps $0x11,%xmm2,%xmm3
movups %xmm3,-0xc(%rdi,%rcx,4)
cmp    %r8,%rdx
je     1517 <achtis+0x417>
sub    %r8,%rax
nop
movswl -0x2(%rsi,%rax,2),%ecx
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
mulsd  %xmm0,%xmm2
addsd  %xmm1,%xmm2
cvttsd2si %xmm2,%ecx
mov    %ecx,-0x4(%rdi,%rax,4)
lea    -0x1(%rax),%rcx
mov    %rcx,%rax
test   %ecx,%ecx
jne    1280 <achtis+0x180>
jmp    1517 <achtis+0x417>
test   %edx,%edx
je     1517 <achtis+0x417>
movslq %edx,%rax
add    $0xffffffff,%edx
cmp    $0x7,%edx
jb     1420 <achtis+0x320>
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     152f <achtis+0x42f>
mov    %r9,%rbx
and    $0xfffffffffffffffe,%rbx
lea    (%rdi,%rax,4),%r10
add    $0xfffffffffffffff0,%r10
lea    (%rsi,%rax,2),%r11
add    $0xfffffffffffffff8,%r11
mov    $0xfffffffffffffffc,%rcx
xchg   %ax,%ax
movq   0x8(%r11,%rcx,2),%xmm0
movq   (%r11,%rcx,2),%xmm1
pshufd $0xc4,%xmm0,%xmm0
pshuflw $0xac,%xmm0,%xmm0
pshufhw $0x24,%xmm0,%xmm0
psrad  $0x10,%xmm0
pshufd $0xc4,%xmm1,%xmm1
pshuflw $0xac,%xmm1,%xmm1
pshufhw $0x24,%xmm1,%xmm1
psrad  $0x10,%xmm1
pshufd $0x1b,%xmm0,%xmm0
movdqu %xmm0,0x10(%r10,%rcx,4)
pshufd $0x1b,%xmm1,%xmm0
movdqu %xmm0,(%r10,%rcx,4)
movq   -0x8(%r11,%rcx,2),%xmm0
movq   -0x10(%r11,%rcx,2),%xmm1
pshufd $0xc4,%xmm0,%xmm0
pshuflw $0xac,%xmm0,%xmm0
pshufhw $0x24,%xmm0,%xmm0
psrad  $0x10,%xmm0
pshufd $0xc4,%xmm1,%xmm1
pshuflw $0xac,%xmm1,%xmm1
pshufhw $0x24,%xmm1,%xmm1
psrad  $0x10,%xmm1
pshufd $0x1b,%xmm0,%xmm0
movdqu %xmm0,-0x10(%r10,%rcx,4)
pshufd $0x1b,%xmm1,%xmm0
movdqu %xmm0,-0x20(%r10,%rcx,4)
add    $0xfffffffffffffff0,%rcx
add    $0xfffffffffffffffe,%rbx
jne    1310 <achtis+0x210>
add    $0x3,%rcx
test   $0x1,%r9b
je     140f <achtis+0x30f>
add    %rax,%rcx
movq   -0x6(%rsi,%rcx,2),%xmm0
movq   -0xe(%rsi,%rcx,2),%xmm1
pshufd $0xc4,%xmm0,%xmm0
pshuflw $0xac,%xmm0,%xmm0
pshufhw $0x24,%xmm0,%xmm0
psrad  $0x10,%xmm0
pshufd $0xc4,%xmm1,%xmm1
pshuflw $0xac,%xmm1,%xmm1
pshufhw $0x24,%xmm1,%xmm1
psrad  $0x10,%xmm1
pshufd $0x1b,%xmm0,%xmm0
movdqu %xmm0,-0xc(%rdi,%rcx,4)
pshufd $0x1b,%xmm1,%xmm0
movdqu %xmm0,-0x1c(%rdi,%rcx,4)
cmp    %r8,%rdx
je     1517 <achtis+0x417>
sub    %r8,%rax
nopl   0x0(%rax,%rax,1)
movswl -0x2(%rsi,%rax,2),%ecx
mov    %ecx,-0x4(%rdi,%rax,4)
lea    -0x1(%rax),%rcx
mov    %rcx,%rax
test   %ecx,%ecx
jne    1420 <achtis+0x320>
jmp    1517 <achtis+0x417>
test   %edx,%edx
je     1517 <achtis+0x417>
movslq %edx,%rcx
add    $0xffffffff,%edx
cmp    $0x3,%edx
jae    1454 <achtis+0x354>
mov    %rcx,%rax
jmp    14f0 <achtis+0x3f0>
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,4),%r9
add    $0xfffffffffffffff0,%r9
lea    (%rsi,%rcx,2),%r10
add    $0xfffffffffffffff8,%r10
mov    %r8,%rbx
neg    %rbx
xor    %ecx,%ecx
nopl   (%rax)
movq   (%r10,%rcx,2),%xmm4
pshufd $0xc4,%xmm4,%xmm4
pshuflw $0xac,%xmm4,%xmm4
pshufhw $0x24,%xmm4,%xmm4
psrad  $0x10,%xmm4
pshufd $0xee,%xmm4,%xmm5
cvtdq2pd %xmm5,%xmm5
cvtdq2pd %xmm4,%xmm4
subpd  %xmm2,%xmm4
subpd  %xmm2,%xmm5
divpd  %xmm3,%xmm5
divpd  %xmm3,%xmm4
cvttpd2dq %xmm4,%xmm4
cvttpd2dq %xmm5,%xmm5
shufps $0x11,%xmm4,%xmm5
movups %xmm5,(%r9,%rcx,4)
add    $0xfffffffffffffffc,%rcx
cmp    %rcx,%rbx
jne    1490 <achtis+0x390>
cmp    %r8,%rdx
je     1517 <achtis+0x417>
cs nopw 0x0(%rax,%rax,1)
movswl -0x2(%rsi,%rax,2),%ecx
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
subsd  %xmm1,%xmm2
divsd  %xmm0,%xmm2
cvttsd2si %xmm2,%ecx
mov    %ecx,-0x4(%rdi,%rax,4)
lea    -0x1(%rax),%rcx
mov    %rcx,%rax
test   %ecx,%ecx
jne    14f0 <achtis+0x3f0>
pop    %rbx
ret
mov    $0xffffffffffffffff,%rcx
test   $0x1,%r9b
jne    1228 <achtis+0x128>
jmp    1273 <achtis+0x173>
mov    $0xffffffffffffffff,%rcx
test   $0x1,%r9b
jne    13c2 <achtis+0x2c2>
jmp    140f <achtis+0x30f>

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

LLVM IR (-O2):
define void @achtis(i32* nocapture writeonly %0, i16* 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 i16, i16* %1, i64 %31
%33 = getelementptr inbounds i16, i16* %32, i64 -3
%34 = bitcast i16* %33 to <4 x i16>*
%35 = load <4 x i16>, <4 x i16>* %34
%36 = shufflevector <4 x i16> %35, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%37 = getelementptr inbounds i16, i16* %32, i64 -4
%38 = getelementptr inbounds i16, i16* %37, i64 -3
%39 = bitcast i16* %38 to <4 x i16>*
%40 = load <4 x i16>, <4 x i16>* %39
%41 = shufflevector <4 x i16> %40, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%42 = sext <4 x i16> %36 to <4 x i32>
%43 = sext <4 x i16> %41 to <4 x i32>
%44 = getelementptr inbounds i32, i32* %0, i64 %31
%45 = shufflevector <4 x i32> %42, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%46 = getelementptr inbounds i32, i32* %44, i64 -3
%47 = bitcast i32* %46 to <4 x i32>*
store <4 x i32> %45, <4 x i32>* %47
%48 = shufflevector <4 x i32> %43, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%49 = getelementptr inbounds i32, i32* %44, i64 -4
%50 = getelementptr inbounds i32, i32* %49, i64 -3
%51 = bitcast i32* %50 to <4 x i32>*
store <4 x i32> %48, <4 x i32>* %51
%52 = sub nuw nsw i64 -9, %28
%53 = add i64 %52, %12
%54 = getelementptr inbounds i16, i16* %1, i64 %53
%55 = getelementptr inbounds i16, i16* %54, i64 -3
%56 = bitcast i16* %55 to <4 x i16>*
%57 = load <4 x i16>, <4 x i16>* %56
%58 = shufflevector <4 x i16> %57, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%59 = getelementptr inbounds i16, i16* %54, i64 -4
%60 = getelementptr inbounds i16, i16* %59, i64 -3
%61 = bitcast i16* %60 to <4 x i16>*
%62 = load <4 x i16>, <4 x i16>* %61
%63 = shufflevector <4 x i16> %62, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%64 = sext <4 x i16> %58 to <4 x i32>
%65 = sext <4 x i16> %63 to <4 x i32>
%66 = getelementptr inbounds i32, i32* %0, i64 %53
%67 = shufflevector <4 x i32> %64, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%68 = getelementptr inbounds i32, i32* %66, i64 -3
%69 = bitcast i32* %68 to <4 x i32>*
store <4 x i32> %67, <4 x i32>* %69
%70 = shufflevector <4 x i32> %65, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%71 = getelementptr inbounds i32, i32* %66, i64 -4
%72 = getelementptr inbounds i32, i32* %71, i64 -3
%73 = bitcast i32* %72 to <4 x i32>*
store <4 x i32> %70, <4 x i32>* %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 i16, i16* %1, i64 %83
%85 = getelementptr inbounds i16, i16* %84, i64 -3
%86 = bitcast i16* %85 to <4 x i16>*
%87 = load <4 x i16>, <4 x i16>* %86
%88 = shufflevector <4 x i16> %87, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%89 = getelementptr inbounds i16, i16* %84, i64 -4
%90 = getelementptr inbounds i16, i16* %89, i64 -3
%91 = bitcast i16* %90 to <4 x i16>*
%92 = load <4 x i16>, <4 x i16>* %91
%93 = shufflevector <4 x i16> %92, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%94 = sext <4 x i16> %88 to <4 x i32>
%95 = sext <4 x i16> %93 to <4 x i32>
%96 = getelementptr inbounds i32, i32* %0, i64 %83
%97 = shufflevector <4 x i32> %94, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%98 = getelementptr inbounds i32, i32* %96, i64 -3
%99 = bitcast i32* %98 to <4 x i32>*
store <4 x i32> %97, <4 x i32>* %99
%100 = shufflevector <4 x i32> %95, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%101 = getelementptr inbounds i32, i32* %96, i64 -4
%102 = getelementptr inbounds i32, i32* %101, i64 -3
%103 = bitcast i32* %102 to <4 x i32>*
store <4 x i32> %100, <4 x i32>* %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 i16, i16* %1, i64 -3
%133 = getelementptr inbounds i32, i32* %0, i64 -3
%134 = getelementptr inbounds i16, i16* %1, i64 -3
%135 = getelementptr inbounds i32, i32* %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 i16, i16* %132, i64 %140
%142 = bitcast i16* %141 to <4 x i16>*
%143 = load <4 x i16>, <4 x i16>* %142
%144 = shufflevector <4 x i16> %143, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%145 = sitofp <4 x i16> %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 i32>
%148 = shufflevector <4 x i32> %147, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%149 = getelementptr inbounds i32, i32* %133, i64 %140
%150 = bitcast i32* %149 to <4 x i32>*
store <4 x i32> %148, <4 x i32>* %150
%151 = sub nuw nsw i64 -5, %137
%152 = add i64 %151, %113
%153 = getelementptr inbounds i16, i16* %134, i64 %152
%154 = bitcast i16* %153 to <4 x i16>*
%155 = load <4 x i16>, <4 x i16>* %154
%156 = shufflevector <4 x i16> %155, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%157 = sitofp <4 x i16> %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 i32>
%160 = shufflevector <4 x i32> %159, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%161 = getelementptr inbounds i32, i32* %135, i64 %152
%162 = bitcast i32* %161 to <4 x i32>*
store <4 x i32> %160, <4 x i32>* %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 i16, i16* %1, i64 -3
%174 = getelementptr inbounds i16, i16* %173, i64 %172
%175 = bitcast i16* %174 to <4 x i16>*
%176 = load <4 x i16>, <4 x i16>* %175
%177 = shufflevector <4 x i16> %176, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%178 = sitofp <4 x i16> %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 i32>
%181 = getelementptr inbounds i32, i32* %0, i64 -3
%182 = shufflevector <4 x i32> %180, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%183 = getelementptr inbounds i32, i32* %181, i64 %172
%184 = bitcast i32* %183 to <4 x i32>*
store <4 x i32> %182, <4 x i32>* %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 i16, i16* %1, i64 -3
%204 = getelementptr inbounds i32, i32* %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 i16, i16* %203, i64 %208
%210 = bitcast i16* %209 to <4 x i16>*
%211 = load <4 x i16>, <4 x i16>* %210
%212 = shufflevector <4 x i16> %211, <4 x i16> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%213 = sitofp <4 x i16> %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 i32>
%217 = shufflevector <4 x i32> %216, <4 x i32> poison, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
%218 = getelementptr inbounds i32, i32* %204, i64 %208
%219 = bitcast i32* %218 to <4 x i32>*
store <4 x i32> %217, <4 x i32>* %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 i16, i16* %1, i64 %228
%230 = load i16, i16* %229
%231 = sitofp i16 %230 to double
%232 = tail call double @llvm.fmuladd.f64(double %231, double %5, double %6)
%233 = fptosi double %232 to i32
%234 = getelementptr inbounds i32, i32* %0, i64 %228
store i32 %233, i32* %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 i16, i16* %1, i64 %239
%241 = load i16, i16* %240
%242 = sitofp i16 %241 to double
%243 = fsub double %242, %6
%244 = fdiv double %243, %5
%245 = fptosi double %244 to i32
%246 = getelementptr inbounds i32, i32* %0, i64 %239
store i32 %245, i32* %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 i16, i16* %1, i64 %251
%253 = load i16, i16* %252
%254 = sext i16 %253 to i32
%255 = getelementptr inbounds i32, i32* %0, i64 %251
store i32 %254, i32* %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
}