void sh2fl(n, ix, y, resolution, norm) long n;
short *ix;
float *y;
long resolution;
char norm;
{
  register long k;
  float factor;
  if (resolution != 16) {
    register long tmp;
    tmp = 16 - resolution;
    for (k = 0; k < n; k++)
      ix[k] >>= tmp;
  }
  if (norm)
    for (factor = 32768.0, k = 16 - resolution; k > 0; k--)
      factor /= 2;
  for (k = 0; k < n; k++)
    y[k] = (float)ix[k];
  if (norm)
    for (k = 0; k < n; k++)
      y[k] /= factor;
}


x86 assembly (clang, -O0):
<sh2fl>:
push   %rbp
mov    %rsp,%rbp
mov    %r8b,%al
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %al,-0x21(%rbp)
cmpq   $0x10,-0x20(%rbp)
je     117c <sh2fl+0x7c>
mov    $0x10,%eax
sub    -0x20(%rbp),%rax
mov    %rax,-0x40(%rbp)
movq   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x8(%rbp),%rax
jge    1177 <sh2fl+0x77>
mov    -0x40(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rdx
mov    %rdx,-0x48(%rbp)
movswl (%rax,%rdx,2),%edx
sar    %cl,%edx
mov    -0x48(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    113a <sh2fl+0x3a>
jmp    117c <sh2fl+0x7c>
cmpb   $0x0,-0x21(%rbp)
je     11d7 <sh2fl+0xd7>
movss  0xe72(%rip),%xmm0
movss  %xmm0,-0x34(%rbp)
mov    $0x10,%eax
sub    -0x20(%rbp),%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jle    11d2 <sh2fl+0xd2>
movss  -0x34(%rbp),%xmm0
movss  0xe4c(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x34(%rbp)
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
jmp    11a0 <sh2fl+0xa0>
jmp    11d7 <sh2fl+0xd7>
movq   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x8(%rbp),%rax
jge    121b <sh2fl+0x11b>
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
cvtsi2ss %eax,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    11df <sh2fl+0xdf>
cmpb   $0x0,-0x21(%rbp)
je     126c <sh2fl+0x16c>
movq   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x8(%rbp),%rax
jge    1267 <sh2fl+0x167>
movss  -0x34(%rbp),%xmm1
mov    -0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    122d <sh2fl+0x12d>
jmp    126c <sh2fl+0x16c>
pop    %rbp
ret

x86 assembly (clang, -O2):
<sh2fl>:
push   %rbx
mov    %rcx,%r9
cmp    $0x10,%rcx
je     12a3 <sh2fl+0x1a3>
test   %rdi,%rdi
jle    12a3 <sh2fl+0x1a3>
mov    $0x10,%ecx
sub    %r9d,%ecx
cmp    $0x10,%rdi
jae    112c <sh2fl+0x2c>
xor    %eax,%eax
jmp    1290 <sh2fl+0x190>
mov    %rdi,%rax
and    $0xfffffffffffffff0,%rax
movd   %ecx,%xmm0
lea    -0x10(%rax),%rbx
mov    %rbx,%r11
shr    $0x4,%r11
add    $0x1,%r11
test   %rbx,%rbx
je     14aa <sh2fl+0x3aa>
mov    %r11,%rbx
and    $0xfffffffffffffffe,%rbx
xor    %r10d,%r10d
xorps  %xmm1,%xmm1
movss  %xmm0,%xmm1
movdqu (%rsi,%r10,2),%xmm3
movdqu 0x10(%rsi,%r10,2),%xmm4
movdqu 0x20(%rsi,%r10,2),%xmm5
movdqu 0x30(%rsi,%r10,2),%xmm2
punpcklwd %xmm3,%xmm6
psrad  $0x10,%xmm6
punpckhwd %xmm3,%xmm3
psrad  $0x10,%xmm3
punpcklwd %xmm4,%xmm7
psrad  $0x10,%xmm7
punpckhwd %xmm4,%xmm4
psrad  $0x10,%xmm4
psrad  %xmm1,%xmm3
psrad  %xmm1,%xmm6
psrad  %xmm1,%xmm4
packssdw %xmm3,%xmm6
psrad  %xmm1,%xmm7
packssdw %xmm4,%xmm7
movdqu %xmm6,(%rsi,%r10,2)
movdqu %xmm7,0x10(%rsi,%r10,2)
punpcklwd %xmm5,%xmm3
psrad  $0x10,%xmm3
punpckhwd %xmm5,%xmm4
psrad  $0x10,%xmm4
punpcklwd %xmm2,%xmm5
psrad  $0x10,%xmm5
punpckhwd %xmm2,%xmm2
psrad  $0x10,%xmm2
psrad  %xmm1,%xmm4
psrad  %xmm1,%xmm3
psrad  %xmm1,%xmm2
packssdw %xmm4,%xmm3
psrad  %xmm1,%xmm5
packssdw %xmm2,%xmm5
movdqu %xmm3,0x20(%rsi,%r10,2)
movdqu %xmm5,0x30(%rsi,%r10,2)
add    $0x20,%r10
add    $0xfffffffffffffffe,%rbx
jne    1160 <sh2fl+0x60>
test   $0x1,%r11b
je     1280 <sh2fl+0x180>
movdqu (%rsi,%r10,2),%xmm1
movdqu 0x10(%rsi,%r10,2),%xmm2
punpcklwd %xmm1,%xmm3
psrad  $0x10,%xmm3
punpckhwd %xmm1,%xmm1
psrad  $0x10,%xmm1
punpcklwd %xmm2,%xmm4
psrad  $0x10,%xmm4
punpckhwd %xmm2,%xmm2
psrad  $0x10,%xmm2
pxor   %xmm5,%xmm5
movss  %xmm0,%xmm5
psrad  %xmm5,%xmm1
psrad  %xmm5,%xmm3
psrad  %xmm5,%xmm2
psrad  %xmm5,%xmm4
packssdw %xmm1,%xmm3
packssdw %xmm2,%xmm4
movdqu %xmm3,(%rsi,%r10,2)
movdqu %xmm4,0x10(%rsi,%r10,2)
cmp    %rdi,%rax
je     12a3 <sh2fl+0x1a3>
cs nopw 0x0(%rax,%rax,1)
nop
movswl (%rsi,%rax,2),%ebx
sar    %cl,%ebx
mov    %bx,(%rsi,%rax,2)
add    $0x1,%rax
cmp    %rax,%rdi
jne    1290 <sh2fl+0x190>
test   %r8b,%r8b
je     12e0 <sh2fl+0x1e0>
cmp    $0xf,%r9
jg     12ea <sh2fl+0x1ea>
mov    $0x11,%eax
sub    %r9,%rax
movss  0xd42(%rip),%xmm0
movss  0xd3e(%rip),%xmm1
cs nopw 0x0(%rax,%rax,1)
mulss  %xmm1,%xmm0
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
ja     12d0 <sh2fl+0x1d0>
jmp    12e0 <sh2fl+0x1e0>
test   %rdi,%rdi
jg     12fb <sh2fl+0x1fb>
jmp    1497 <sh2fl+0x397>
movss  0xd0e(%rip),%xmm0
test   %rdi,%rdi
jle    1497 <sh2fl+0x397>
cmp    $0x8,%rdi
jae    1308 <sh2fl+0x208>
xor    %eax,%eax
jmp    13d0 <sh2fl+0x2d0>
mov    %rdi,%rax
and    $0xfffffffffffffff8,%rax
lea    -0x8(%rax),%rcx
mov    %rcx,%r9
shr    $0x3,%r9
add    $0x1,%r9
test   %rcx,%rcx
je     1499 <sh2fl+0x399>
mov    %r9,%rbx
and    $0xfffffffffffffffe,%rbx
xor    %ecx,%ecx
movq   (%rsi,%rcx,2),%xmm1
punpcklwd %xmm1,%xmm1
movq   0x8(%rsi,%rcx,2),%xmm2
punpcklwd %xmm2,%xmm2
psrad  $0x10,%xmm1
cvtdq2ps %xmm1,%xmm1
psrad  $0x10,%xmm2
cvtdq2ps %xmm2,%xmm2
movups %xmm1,(%rdx,%rcx,4)
movups %xmm2,0x10(%rdx,%rcx,4)
movq   0x10(%rsi,%rcx,2),%xmm1
punpcklwd %xmm1,%xmm1
movq   0x18(%rsi,%rcx,2),%xmm2
punpcklwd %xmm2,%xmm2
psrad  $0x10,%xmm1
cvtdq2ps %xmm1,%xmm1
psrad  $0x10,%xmm2
cvtdq2ps %xmm2,%xmm2
movups %xmm1,0x20(%rdx,%rcx,4)
movups %xmm2,0x30(%rdx,%rcx,4)
add    $0x10,%rcx
add    $0xfffffffffffffffe,%rbx
jne    1330 <sh2fl+0x230>
test   $0x1,%r9b
je     13c6 <sh2fl+0x2c6>
movq   (%rsi,%rcx,2),%xmm1
movq   0x8(%rsi,%rcx,2),%xmm2
punpcklwd %xmm1,%xmm1
psrad  $0x10,%xmm1
cvtdq2ps %xmm1,%xmm1
punpcklwd %xmm2,%xmm2
psrad  $0x10,%xmm2
cvtdq2ps %xmm2,%xmm2
movups %xmm1,(%rdx,%rcx,4)
movups %xmm2,0x10(%rdx,%rcx,4)
cmp    %rdi,%rax
je     13e9 <sh2fl+0x2e9>
nopl   0x0(%rax,%rax,1)
movswl (%rsi,%rax,2),%ecx
xorps  %xmm1,%xmm1
cvtsi2ss %ecx,%xmm1
movss  %xmm1,(%rdx,%rax,4)
add    $0x1,%rax
cmp    %rax,%rdi
jne    13d0 <sh2fl+0x2d0>
test   %r8b,%r8b
je     1497 <sh2fl+0x397>
test   %rdi,%rdi
jle    1497 <sh2fl+0x397>
cmp    $0x4,%rdi
jae    1405 <sh2fl+0x305>
xor    %eax,%eax
jmp    1480 <sh2fl+0x380>
mov    %rdi,%rax
and    $0xfffffffffffffffc,%rax
movaps %xmm0,%xmm1
shufps $0x0,%xmm0,%xmm1
lea    -0x4(%rax),%rcx
mov    %rcx,%rbx
shr    $0x2,%rbx
add    $0x1,%rbx
test   %rcx,%rcx
je     14bc <sh2fl+0x3bc>
mov    %rbx,%rcx
and    $0xfffffffffffffffe,%rcx
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movups (%rdx,%rsi,4),%xmm2
movups 0x10(%rdx,%rsi,4),%xmm3
divps  %xmm1,%xmm2
movups %xmm2,(%rdx,%rsi,4)
divps  %xmm1,%xmm3
movups %xmm3,0x10(%rdx,%rsi,4)
add    $0x8,%rsi
add    $0xfffffffffffffffe,%rcx
jne    1440 <sh2fl+0x340>
test   $0x1,%bl
je     1472 <sh2fl+0x372>
movups (%rdx,%rsi,4),%xmm2
divps  %xmm1,%xmm2
movups %xmm2,(%rdx,%rsi,4)
cmp    %rdi,%rax
je     1497 <sh2fl+0x397>
nopw   0x0(%rax,%rax,1)
movss  (%rdx,%rax,4),%xmm1
divss  %xmm0,%xmm1
movss  %xmm1,(%rdx,%rax,4)
add    $0x1,%rax
cmp    %rax,%rdi
jne    1480 <sh2fl+0x380>
pop    %rbx
ret
xor    %ecx,%ecx
test   $0x1,%r9b
jne    139a <sh2fl+0x29a>
jmp    13c6 <sh2fl+0x2c6>
xor    %r10d,%r10d
test   $0x1,%r11b
jne    1222 <sh2fl+0x122>
jmp    1280 <sh2fl+0x180>
xor    %esi,%esi
test   $0x1,%bl
jne    1467 <sh2fl+0x367>
jmp    1472 <sh2fl+0x372>

LLVM IR (-O0):
define void @sh2fl(i64 %0, i16* %1, float* %2, i64 %3, i32 %4) {
%6 = alloca i64
%7 = alloca i16*
%8 = alloca float*
%9 = alloca i64
%10 = alloca i8
%11 = alloca i64
%12 = alloca float
%13 = alloca i64
%14 = trunc i32 %4 to i8
store i64 %0, i64* %6
store i16* %1, i16** %7
store float* %2, float** %8
store i64 %3, i64* %9
store i8 %14, i8* %10
%15 = load i64, i64* %9
%16 = icmp ne i64 %15, 16
br i1 %16, label %17, label %38
17: ; preds = %5
%18 = load i64, i64* %9
%19 = sub nsw i64 16, %18
store i64 %19, i64* %13
store i64 0, i64* %11
br label %20
20: ; preds = %34, %17
%21 = load i64, i64* %11
%22 = load i64, i64* %6
%23 = icmp slt i64 %21, %22
br i1 %23, label %24, label %37
24: ; preds = %20
%25 = load i64, i64* %13
%26 = load i16*, i16** %7
%27 = load i64, i64* %11
%28 = getelementptr inbounds i16, i16* %26, i64 %27
%29 = load i16, i16* %28
%30 = sext i16 %29 to i32
%31 = trunc i64 %25 to i32
%32 = ashr i32 %30, %31
%33 = trunc i32 %32 to i16
store i16 %33, i16* %28
br label %34
34: ; preds = %24
%35 = load i64, i64* %11
%36 = add nsw i64 %35, 1
store i64 %36, i64* %11
br label %20
37: ; preds = %20
br label %38
38: ; preds = %37, %5
%39 = load i8, i8* %10
%40 = icmp ne i8 %39, 0
br i1 %40, label %41, label %54
41: ; preds = %38
store float 3.276800e+04, float* %12
%42 = load i64, i64* %9
%43 = sub nsw i64 16, %42
store i64 %43, i64* %11
br label %44
44: ; preds = %50, %41
%45 = load i64, i64* %11
%46 = icmp sgt i64 %45, 0
br i1 %46, label %47, label %53
47: ; preds = %44
%48 = load float, float* %12
%49 = fdiv float %48, 2.000000e+00
store float %49, float* %12
br label %50
50: ; preds = %47
%51 = load i64, i64* %11
%52 = add nsw i64 %51, -1
store i64 %52, i64* %11
br label %44
53: ; preds = %44
br label %54
54: ; preds = %53, %38
store i64 0, i64* %11
br label %55
55: ; preds = %68, %54
%56 = load i64, i64* %11
%57 = load i64, i64* %6
%58 = icmp slt i64 %56, %57
br i1 %58, label %59, label %71
59: ; preds = %55
%60 = load i16*, i16** %7
%61 = load i64, i64* %11
%62 = getelementptr inbounds i16, i16* %60, i64 %61
%63 = load i16, i16* %62
%64 = sitofp i16 %63 to float
%65 = load float*, float** %8
%66 = load i64, i64* %11
%67 = getelementptr inbounds float, float* %65, i64 %66
store float %64, float* %67
br label %68
68: ; preds = %59
%69 = load i64, i64* %11
%70 = add nsw i64 %69, 1
store i64 %70, i64* %11
br label %55
71: ; preds = %55
%72 = load i8, i8* %10
%73 = icmp ne i8 %72, 0
br i1 %73, label %74, label %90
74: ; preds = %71
store i64 0, i64* %11
br label %75
75: ; preds = %86, %74
%76 = load i64, i64* %11
%77 = load i64, i64* %6
%78 = icmp slt i64 %76, %77
br i1 %78, label %79, label %89
79: ; preds = %75
%80 = load float, float* %12
%81 = load float*, float** %8
%82 = load i64, i64* %11
%83 = getelementptr inbounds float, float* %81, i64 %82
%84 = load float, float* %83
%85 = fdiv float %84, %80
store float %85, float* %83
br label %86
86: ; preds = %79
%87 = load i64, i64* %11
%88 = add nsw i64 %87, 1
store i64 %88, i64* %11
br label %75
89: ; preds = %75
br label %90
90: ; preds = %89, %71
ret void
}

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