void achtir(v1, v2, npix, direction, hasscale, dirale, bzero) int *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):
<achtir>:
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     11db <achtir+0xdb>
cmpl   $0x0,-0x18(%rbp)
je     1189 <achtir+0x89>
jmp    1139 <achtir+0x39>
mov    -0x14(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x14(%rbp)
cmp    $0x0,%eax
je     1184 <achtir+0x84>
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,%edx
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1139 <achtir+0x39>
jmp    11d6 <achtir+0xd6>
jmp    118e <achtir+0x8e>
mov    -0x14(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x14(%rbp)
cmp    $0x0,%eax
je     11d1 <achtir+0xd1>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%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    118e <achtir+0x8e>
jmp    11d6 <achtir+0xd6>
jmp    1216 <achtir+0x116>
jmp    11e0 <achtir+0xe0>
mov    -0x14(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x14(%rbp)
cmp    $0x0,%eax
je     1211 <achtir+0x111>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cvttss2si (%rax,%rcx,4),%edx
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    11e0 <achtir+0xe0>
jmp    1216 <achtir+0x116>
pop    %rbp
ret

x86 assembly (clang, -O2):
<achtir>:
push   %rbx
test   %r8d,%r8d
je     126a <achtir+0x16a>
test   %ecx,%ecx
je     137a <achtir+0x27a>
test   %edx,%edx
je     1445 <achtir+0x345>
movslq %edx,%rax
add    $0xffffffff,%edx
cmp    $0x3,%edx
jb     1240 <achtir+0x140>
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     1447 <achtir+0x347>
mov    %r9,%r10
and    $0xfffffffffffffffe,%r10
lea    (%rdi,%rax,4),%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
addpd  %xmm3,%xmm4
mulpd  %xmm2,%xmm5
addpd  %xmm3,%xmm5
cvttpd2dq %xmm5,%xmm5
cvttpd2dq %xmm4,%xmm4
shufps $0x11,%xmm5,%xmm4
movups %xmm4,(%r11,%rcx,4)
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
shufps $0x11,%xmm5,%xmm4
movups %xmm4,-0x10(%r11,%rcx,4)
add    $0xfffffffffffffff8,%rcx
add    $0xfffffffffffffffe,%r10
jne    1180 <achtir+0x80>
add    $0x3,%rcx
test   $0x1,%r9b
je     1230 <achtir+0x130>
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
shufps $0x11,%xmm2,%xmm3
movups %xmm3,-0xc(%rdi,%rcx,4)
cmp    %r8,%rdx
je     1445 <achtir+0x345>
sub    %r8,%rax
nopl   0x0(%rax)
movss  -0x4(%rsi,%rax,4),%xmm2
cvtss2sd %xmm2,%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    1240 <achtir+0x140>
jmp    1445 <achtir+0x345>
test   %edx,%edx
je     1445 <achtir+0x345>
movslq %edx,%rax
add    $0xffffffff,%edx
cmp    $0x7,%edx
jb     1360 <achtir+0x260>
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     145d <achtir+0x35d>
mov    %r9,%rbx
and    $0xfffffffffffffffe,%rbx
lea    (%rdi,%rax,4),%r10
add    $0xfffffffffffffff0,%r10
lea    (%rsi,%rax,4),%r11
add    $0xfffffffffffffff0,%r11
mov    $0xfffffffffffffffc,%rcx
nopl   0x0(%rax)
movups (%r11,%rcx,4),%xmm0
movups 0x10(%r11,%rcx,4),%xmm1
cvttps2dq %xmm1,%xmm1
cvttps2dq %xmm0,%xmm0
movups %xmm1,0x10(%r10,%rcx,4)
movups %xmm0,(%r10,%rcx,4)
movups -0x20(%r11,%rcx,4),%xmm0
movups -0x10(%r11,%rcx,4),%xmm1
cvttps2dq %xmm1,%xmm1
cvttps2dq %xmm0,%xmm0
movupd %xmm1,-0x10(%r10,%rcx,4)
movupd %xmm0,-0x20(%r10,%rcx,4)
add    $0xfffffffffffffff0,%rcx
add    $0xfffffffffffffffe,%rbx
jne    12d0 <achtir+0x1d0>
add    $0x3,%rcx
test   $0x1,%r9b
je     1345 <achtir+0x245>
add    %rax,%rcx
movups -0x1c(%rsi,%rcx,4),%xmm0
movups -0xc(%rsi,%rcx,4),%xmm1
cvttps2dq %xmm1,%xmm1
cvttps2dq %xmm0,%xmm0
movupd %xmm1,-0xc(%rdi,%rcx,4)
movupd %xmm0,-0x1c(%rdi,%rcx,4)
cmp    %r8,%rdx
je     1445 <achtir+0x345>
sub    %r8,%rax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cvttss2si -0x4(%rsi,%rax,4),%ecx
mov    %ecx,-0x4(%rdi,%rax,4)
lea    -0x1(%rax),%rcx
mov    %rcx,%rax
test   %ecx,%ecx
jne    1360 <achtir+0x260>
jmp    1445 <achtir+0x345>
test   %edx,%edx
je     1445 <achtir+0x345>
movslq %edx,%rcx
add    $0xffffffff,%edx
cmp    $0x3,%edx
jae    1395 <achtir+0x295>
mov    %rcx,%rax
jmp    1420 <achtir+0x320>
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,4),%r10
add    $0xfffffffffffffff0,%r10
mov    %r8,%rbx
neg    %rbx
xor    %ecx,%ecx
xchg   %ax,%ax
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
shufps $0x11,%xmm5,%xmm4
movups %xmm4,(%r9,%rcx,4)
add    $0xfffffffffffffffc,%rcx
cmp    %rcx,%rbx
jne    13d0 <achtir+0x2d0>
cmp    %r8,%rdx
je     1445 <achtir+0x345>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movss  -0x4(%rsi,%rax,4),%xmm2
cvtss2sd %xmm2,%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    1420 <achtir+0x320>
pop    %rbx
ret
mov    $0xffffffffffffffff,%rcx
test   $0x1,%r9b
jne    11fa <achtir+0xfa>
jmp    1230 <achtir+0x130>
mov    $0xffffffffffffffff,%rcx
test   $0x1,%r9b
jne    1324 <achtir+0x224>
jmp    1345 <achtir+0x245>

LLVM IR (-O0):
define void @achtir(i32* %0, float* %1, i32 %2, i32 %3, i32 %4, double %5, double %6) {
%8 = alloca i32*
%9 = alloca float*
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca double
%14 = alloca double
store i32* %0, i32** %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 i32
%36 = load i32*, i32** %8
%37 = load i32, i32* %10
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i32, i32* %36, i64 %38
store i32 %35, i32* %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 i32
%58 = load i32*, i32** %8
%59 = load i32, i32* %10
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds i32, i32* %58, i64 %60
store i32 %57, i32* %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 i32
%76 = load i32*, i32** %8
%77 = load i32, i32* %10
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds i32, i32* %76, i64 %78
store i32 %75, i32* %79
br label %65
80: ; preds = %65
br label %81
81: ; preds = %80, %63
ret void
}

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