void SKP_Silk_scale_vector32_16_Q14(int *data1, int gain_Q14, int dataSize) {
  int i, gain_Q16;
  if (gain_Q14 < (0x7FFF >> 2)) {
    gain_Q16 = ((gain_Q14) << (2));
    for (i = 0; i < dataSize; i++) {
      data1[i] =
          ((((data1[i]) >> 16) * (int)((short)(gain_Q16))) +
           ((((data1[i]) & 0x0000FFFF) * (int)((short)(gain_Q16))) >> 16));
    }
  } else {
    ;
    for (i = 0; i < dataSize; i++) {
      data1[i] =
          ((((((data1[i]) >> 16) * (int)((short)(gain_Q14))) +
             ((((data1[i]) & 0x0000FFFF) * (int)((short)(gain_Q14))) >> 16)))
           << (2));
    }
  }
}


x86 assembly (clang, -O0):
<SKP_Silk_scale_vector32_16_Q14>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
cmpl   $0x1fff,-0xc(%rbp)
jge    1188 <SKP_Silk_scale_vector32_16_Q14+0x88>
mov    -0xc(%rbp),%eax
shl    $0x2,%eax
mov    %eax,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1183 <SKP_Silk_scale_vector32_16_Q14+0x83>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
sar    $0x10,%edx
mov    -0x18(%rbp),%eax
cwtl
imul   %eax,%edx
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
and    $0xffff,%eax
mov    -0x18(%rbp),%ecx
movswl %cx,%ecx
imul   %ecx,%eax
sar    $0x10,%eax
add    %eax,%edx
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    112b <SKP_Silk_scale_vector32_16_Q14+0x2b>
jmp    11ef <SKP_Silk_scale_vector32_16_Q14+0xef>
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    11ea <SKP_Silk_scale_vector32_16_Q14+0xea>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
sar    $0x10,%edx
mov    -0xc(%rbp),%eax
cwtl
imul   %eax,%edx
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
and    $0xffff,%eax
mov    -0xc(%rbp),%ecx
movswl %cx,%ecx
imul   %ecx,%eax
sar    $0x10,%eax
add    %eax,%edx
shl    $0x2,%edx
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    118f <SKP_Silk_scale_vector32_16_Q14+0x8f>
jmp    11ef <SKP_Silk_scale_vector32_16_Q14+0xef>
pop    %rbp
ret

x86 assembly (clang, -O2):
<SKP_Silk_scale_vector32_16_Q14>:
cmp    $0x1fff,%esi
jge    1125 <SKP_Silk_scale_vector32_16_Q14+0x25>
test   %edx,%edx
jle    1473 <SKP_Silk_scale_vector32_16_Q14+0x373>
shl    $0x2,%esi
movswl %si,%eax
mov    %edx,%r9d
cmp    $0x4,%edx
jae    1143 <SKP_Silk_scale_vector32_16_Q14+0x43>
xor    %edx,%edx
jmp    12b0 <SKP_Silk_scale_vector32_16_Q14+0x1b0>
test   %edx,%edx
jle    1473 <SKP_Silk_scale_vector32_16_Q14+0x373>
movswl %si,%eax
mov    %edx,%r9d
cmp    $0x4,%edx
jae    12d5 <SKP_Silk_scale_vector32_16_Q14+0x1d5>
xor    %edx,%edx
jmp    1450 <SKP_Silk_scale_vector32_16_Q14+0x350>
mov    %r9d,%edx
and    $0xfffffffc,%edx
movd   %eax,%xmm0
pshufd $0x0,%xmm0,%xmm0
lea    -0x4(%rdx),%rcx
mov    %rcx,%r8
shr    $0x2,%r8
add    $0x1,%r8
pshufd $0xf5,%xmm0,%xmm1
test   %rcx,%rcx
je     1474 <SKP_Silk_scale_vector32_16_Q14+0x374>
mov    %r8,%rcx
and    $0xfffffffffffffffe,%rcx
xor    %esi,%esi
movdqa 0xe80(%rip),%xmm2
movdqu (%rdi,%rsi,4),%xmm4
movdqu 0x10(%rdi,%rsi,4),%xmm3
movdqa %xmm4,%xmm5
psrad  $0x10,%xmm5
pshufd $0xf5,%xmm5,%xmm6
pmuludq %xmm0,%xmm5
pshufd $0xe8,%xmm5,%xmm5
pmuludq %xmm1,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm5
pand   %xmm2,%xmm4
pshufd $0xf5,%xmm4,%xmm6
pmuludq %xmm0,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm1,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm4
psrad  $0x10,%xmm4
paddd  %xmm5,%xmm4
movdqu %xmm4,(%rdi,%rsi,4)
movdqa %xmm3,%xmm4
psrad  $0x10,%xmm4
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm0,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm1,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pand   %xmm2,%xmm3
pshufd $0xf5,%xmm3,%xmm5
pmuludq %xmm0,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm1,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm3
psrad  $0x10,%xmm3
paddd  %xmm4,%xmm3
movdqu %xmm3,0x10(%rdi,%rsi,4)
add    $0x8,%rsi
add    $0xfffffffffffffffe,%rcx
jne    1180 <SKP_Silk_scale_vector32_16_Q14+0x80>
test   $0x1,%r8b
je     129c <SKP_Silk_scale_vector32_16_Q14+0x19c>
movdqu (%rdi,%rsi,4),%xmm2
movdqa %xmm2,%xmm3
psrad  $0x10,%xmm3
pshufd $0xf5,%xmm3,%xmm4
pmuludq %xmm0,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm1,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm3
pand   0xd8d(%rip),%xmm2
pmuludq %xmm2,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm1
punpckldq %xmm1,%xmm0
psrad  $0x10,%xmm0
paddd  %xmm3,%xmm0
movdqu %xmm0,(%rdi,%rsi,4)
cmp    %r9,%rdx
je     1473 <SKP_Silk_scale_vector32_16_Q14+0x373>
cs nopw 0x0(%rax,%rax,1)
nop
mov    (%rdi,%rdx,4),%ecx
movzwl %cx,%esi
sar    $0x10,%ecx
imul   %eax,%ecx
imul   %eax,%esi
sar    $0x10,%esi
add    %ecx,%esi
mov    %esi,(%rdi,%rdx,4)
add    $0x1,%rdx
cmp    %rdx,%r9
jne    12b0 <SKP_Silk_scale_vector32_16_Q14+0x1b0>
jmp    1473 <SKP_Silk_scale_vector32_16_Q14+0x373>
mov    %r9d,%edx
and    $0xfffffffc,%edx
movd   %eax,%xmm0
pshufd $0x0,%xmm0,%xmm0
lea    -0x4(%rdx),%rcx
mov    %rcx,%r8
shr    $0x2,%r8
add    $0x1,%r8
pshufd $0xf5,%xmm0,%xmm1
test   %rcx,%rcx
je     1485 <SKP_Silk_scale_vector32_16_Q14+0x385>
mov    %r8,%rcx
and    $0xfffffffffffffffe,%rcx
xor    %esi,%esi
movdqa 0xcee(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqu (%rdi,%rsi,4),%xmm4
movdqu 0x10(%rdi,%rsi,4),%xmm3
movdqa %xmm4,%xmm5
psrad  $0x10,%xmm5
pshufd $0xf5,%xmm5,%xmm6
pmuludq %xmm0,%xmm5
pshufd $0xe8,%xmm5,%xmm5
pmuludq %xmm1,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm5
pand   %xmm2,%xmm4
pshufd $0xf5,%xmm4,%xmm6
pmuludq %xmm0,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm1,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm4
psrad  $0x10,%xmm4
paddd  %xmm5,%xmm4
pslld  $0x2,%xmm4
movdqu %xmm4,(%rdi,%rsi,4)
movdqa %xmm3,%xmm4
psrad  $0x10,%xmm4
pshufd $0xf5,%xmm4,%xmm5
pmuludq %xmm0,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pmuludq %xmm1,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm4
pand   %xmm2,%xmm3
pshufd $0xf5,%xmm3,%xmm5
pmuludq %xmm0,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm1,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm3
psrad  $0x10,%xmm3
paddd  %xmm4,%xmm3
pslld  $0x2,%xmm3
movdqu %xmm3,0x10(%rdi,%rsi,4)
add    $0x8,%rsi
add    $0xfffffffffffffffe,%rcx
jne    1320 <SKP_Silk_scale_vector32_16_Q14+0x220>
test   $0x1,%r8b
je     144b <SKP_Silk_scale_vector32_16_Q14+0x34b>
movdqu (%rdi,%rsi,4),%xmm2
movdqa %xmm2,%xmm3
psrad  $0x10,%xmm3
pshufd $0xf5,%xmm3,%xmm4
pmuludq %xmm0,%xmm3
pshufd $0xe8,%xmm3,%xmm3
pmuludq %xmm1,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm3
pand   0xbe3(%rip),%xmm2
pmuludq %xmm2,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm1
punpckldq %xmm1,%xmm0
psrad  $0x10,%xmm0
paddd  %xmm3,%xmm0
pslld  $0x2,%xmm0
movdqu %xmm0,(%rdi,%rsi,4)
cmp    %r9,%rdx
je     1473 <SKP_Silk_scale_vector32_16_Q14+0x373>
mov    (%rdi,%rdx,4),%ecx
movzwl %cx,%esi
sar    $0x10,%ecx
imul   %eax,%ecx
imul   %eax,%esi
sar    $0x10,%esi
add    %ecx,%esi
shl    $0x2,%esi
mov    %esi,(%rdi,%rdx,4)
add    $0x1,%rdx
cmp    %rdx,%r9
jne    1450 <SKP_Silk_scale_vector32_16_Q14+0x350>
ret
xor    %esi,%esi
test   $0x1,%r8b
jne    1242 <SKP_Silk_scale_vector32_16_Q14+0x142>
jmp    129c <SKP_Silk_scale_vector32_16_Q14+0x19c>
xor    %esi,%esi
test   $0x1,%r8b
jne    13ec <SKP_Silk_scale_vector32_16_Q14+0x2ec>
jmp    144b <SKP_Silk_scale_vector32_16_Q14+0x34b>

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

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