void vec_mpy1(short y[], const short x[], short scaler) {
  int i;
  for (i = 0; i < 150; i++)
    y[i] += ((scaler * x[i]) >> 15);
}


x86 assembly (clang, -O0):
<vec_mpy1>:
push   %rbp
mov    %rsp,%rbp
mov    %dx,%ax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %ax,-0x12(%rbp)
movl   $0x0,-0x18(%rbp)
cmpl   $0x96,-0x18(%rbp)
jge    115d <vec_mpy1+0x5d>
movswl -0x12(%rbp),%esi
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
imul   %eax,%esi
sar    $0xf,%esi
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movswl (%rax,%rcx,2),%edx
add    %esi,%edx
mov    %dx,(%rax,%rcx,2)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    111a <vec_mpy1+0x1a>
pop    %rbp
ret

x86 assembly (clang, -O2):
<vec_mpy1>:
lea    0x12c(%rsi),%rax
cmp    %rdi,%rax
jbe    111f <vec_mpy1+0x1f>
lea    0x12c(%rdi),%rax
cmp    %rsi,%rax
jbe    111f <vec_mpy1+0x1f>
xor    %eax,%eax
jmp    1640 <vec_mpy1+0x540>
movdqu (%rsi),%xmm3
movdqu 0x10(%rsi),%xmm1
movd   %edx,%xmm0
pshufd $0x0,%xmm0,%xmm0
packssdw %xmm0,%xmm0
movdqa %xmm0,%xmm4
pmulhw %xmm3,%xmm4
pmullw %xmm0,%xmm3
movdqa %xmm3,%xmm2
punpcklwd %xmm4,%xmm2
punpckhwd %xmm4,%xmm3
movdqa %xmm0,%xmm4
pmulhw %xmm1,%xmm4
pmullw %xmm0,%xmm1
movdqa %xmm1,%xmm5
punpcklwd %xmm4,%xmm5
punpckhwd %xmm4,%xmm1
pslld  $0x1,%xmm3
psrad  $0x10,%xmm3
pslld  $0x1,%xmm2
psrad  $0x10,%xmm2
packssdw %xmm3,%xmm2
pslld  $0x1,%xmm1
psrad  $0x10,%xmm1
pslld  $0x1,%xmm5
psrad  $0x10,%xmm5
packssdw %xmm1,%xmm5
movdqu (%rdi),%xmm3
paddw  %xmm2,%xmm3
movdqu 0x10(%rdi),%xmm2
paddw  %xmm5,%xmm2
movdqu 0x20(%rdi),%xmm4
movdqu 0x30(%rdi),%xmm1
movdqu %xmm3,(%rdi)
movdqu %xmm2,0x10(%rdi)
movdqu 0x20(%rsi),%xmm5
movdqu 0x30(%rsi),%xmm2
movdqa %xmm0,%xmm6
pmulhw %xmm5,%xmm6
pmullw %xmm0,%xmm5
movdqa %xmm5,%xmm3
punpcklwd %xmm6,%xmm3
punpckhwd %xmm6,%xmm5
movdqa %xmm0,%xmm6
pmulhw %xmm2,%xmm6
pmullw %xmm0,%xmm2
movdqa %xmm2,%xmm7
punpcklwd %xmm6,%xmm7
punpckhwd %xmm6,%xmm2
pslld  $0x1,%xmm5
psrad  $0x10,%xmm5
pslld  $0x1,%xmm3
psrad  $0x10,%xmm3
packssdw %xmm5,%xmm3
paddw  %xmm4,%xmm3
pslld  $0x1,%xmm2
psrad  $0x10,%xmm2
pslld  $0x1,%xmm7
psrad  $0x10,%xmm7
packssdw %xmm2,%xmm7
paddw  %xmm1,%xmm7
movdqu %xmm3,0x20(%rdi)
movdqu %xmm7,0x30(%rdi)
movdqu 0x40(%rsi),%xmm3
movdqu 0x50(%rsi),%xmm1
movdqa %xmm0,%xmm4
pmulhw %xmm3,%xmm4
pmullw %xmm0,%xmm3
movdqa %xmm3,%xmm2
punpcklwd %xmm4,%xmm2
punpckhwd %xmm4,%xmm3
movdqa %xmm0,%xmm4
pmulhw %xmm1,%xmm4
pmullw %xmm0,%xmm1
movdqa %xmm1,%xmm5
punpcklwd %xmm4,%xmm5
punpckhwd %xmm4,%xmm1
movdqu 0x40(%rdi),%xmm4
movdqu 0x50(%rdi),%xmm6
pslld  $0x1,%xmm3
psrad  $0x10,%xmm3
pslld  $0x1,%xmm2
psrad  $0x10,%xmm2
packssdw %xmm3,%xmm2
paddw  %xmm4,%xmm2
pslld  $0x1,%xmm1
psrad  $0x10,%xmm1
pslld  $0x1,%xmm5
psrad  $0x10,%xmm5
packssdw %xmm1,%xmm5
paddw  %xmm6,%xmm5
movdqu %xmm2,0x40(%rdi)
movdqu %xmm5,0x50(%rdi)
movdqu 0x60(%rsi),%xmm3
movdqu 0x70(%rsi),%xmm1
movdqa %xmm0,%xmm4
pmulhw %xmm3,%xmm4
pmullw %xmm0,%xmm3
movdqa %xmm3,%xmm2
punpcklwd %xmm4,%xmm2
punpckhwd %xmm4,%xmm3
movdqa %xmm0,%xmm4
pmulhw %xmm1,%xmm4
pmullw %xmm0,%xmm1
movdqa %xmm1,%xmm5
punpcklwd %xmm4,%xmm5
punpckhwd %xmm4,%xmm1
movdqu 0x60(%rdi),%xmm4
movdqu 0x70(%rdi),%xmm6
pslld  $0x1,%xmm3
psrad  $0x10,%xmm3
pslld  $0x1,%xmm2
psrad  $0x10,%xmm2
packssdw %xmm3,%xmm2
paddw  %xmm4,%xmm2
pslld  $0x1,%xmm1
psrad  $0x10,%xmm1
pslld  $0x1,%xmm5
psrad  $0x10,%xmm5
packssdw %xmm1,%xmm5
paddw  %xmm6,%xmm5
movdqu %xmm2,0x60(%rdi)
movdqu %xmm5,0x70(%rdi)
movdqu 0x80(%rsi),%xmm3
movdqu 0x90(%rsi),%xmm1
movdqa %xmm0,%xmm4
pmulhw %xmm3,%xmm4
pmullw %xmm0,%xmm3
movdqa %xmm3,%xmm2
punpcklwd %xmm4,%xmm2
punpckhwd %xmm4,%xmm3
movdqa %xmm0,%xmm4
pmulhw %xmm1,%xmm4
pmullw %xmm0,%xmm1
movdqa %xmm1,%xmm5
punpcklwd %xmm4,%xmm5
punpckhwd %xmm4,%xmm1
movdqu 0x80(%rdi),%xmm4
movdqu 0x90(%rdi),%xmm6
pslld  $0x1,%xmm3
psrad  $0x10,%xmm3
pslld  $0x1,%xmm2
psrad  $0x10,%xmm2
packssdw %xmm3,%xmm2
paddw  %xmm4,%xmm2
pslld  $0x1,%xmm1
psrad  $0x10,%xmm1
pslld  $0x1,%xmm5
psrad  $0x10,%xmm5
packssdw %xmm1,%xmm5
paddw  %xmm6,%xmm5
movdqu %xmm2,0x80(%rdi)
movdqu %xmm5,0x90(%rdi)
movdqu 0xa0(%rsi),%xmm3
movdqu 0xb0(%rsi),%xmm1
movdqa %xmm0,%xmm4
pmulhw %xmm3,%xmm4
pmullw %xmm0,%xmm3
movdqa %xmm3,%xmm2
punpcklwd %xmm4,%xmm2
punpckhwd %xmm4,%xmm3
movdqa %xmm0,%xmm4
pmulhw %xmm1,%xmm4
pmullw %xmm0,%xmm1
movdqa %xmm1,%xmm5
punpcklwd %xmm4,%xmm5
punpckhwd %xmm4,%xmm1
movdqu 0xa0(%rdi),%xmm4
movdqu 0xb0(%rdi),%xmm6
pslld  $0x1,%xmm3
psrad  $0x10,%xmm3
pslld  $0x1,%xmm2
psrad  $0x10,%xmm2
packssdw %xmm3,%xmm2
paddw  %xmm4,%xmm2
pslld  $0x1,%xmm1
psrad  $0x10,%xmm1
pslld  $0x1,%xmm5
psrad  $0x10,%xmm5
packssdw %xmm1,%xmm5
paddw  %xmm6,%xmm5
movdqu %xmm2,0xa0(%rdi)
movdqu %xmm5,0xb0(%rdi)
movdqu 0xc0(%rsi),%xmm3
movdqu 0xd0(%rsi),%xmm1
movdqa %xmm0,%xmm4
pmulhw %xmm3,%xmm4
pmullw %xmm0,%xmm3
movdqa %xmm3,%xmm2
punpcklwd %xmm4,%xmm2
punpckhwd %xmm4,%xmm3
movdqa %xmm0,%xmm4
pmulhw %xmm1,%xmm4
pmullw %xmm0,%xmm1
movdqa %xmm1,%xmm5
punpcklwd %xmm4,%xmm5
punpckhwd %xmm4,%xmm1
movdqu 0xc0(%rdi),%xmm4
movdqu 0xd0(%rdi),%xmm6
pslld  $0x1,%xmm3
psrad  $0x10,%xmm3
pslld  $0x1,%xmm2
psrad  $0x10,%xmm2
packssdw %xmm3,%xmm2
paddw  %xmm4,%xmm2
pslld  $0x1,%xmm1
psrad  $0x10,%xmm1
pslld  $0x1,%xmm5
psrad  $0x10,%xmm5
packssdw %xmm1,%xmm5
paddw  %xmm6,%xmm5
movdqu %xmm2,0xc0(%rdi)
movdqu %xmm5,0xd0(%rdi)
movdqu 0xe0(%rsi),%xmm3
movdqu 0xf0(%rsi),%xmm1
movdqa %xmm0,%xmm4
pmulhw %xmm3,%xmm4
pmullw %xmm0,%xmm3
movdqa %xmm3,%xmm2
punpcklwd %xmm4,%xmm2
punpckhwd %xmm4,%xmm3
movdqa %xmm0,%xmm4
pmulhw %xmm1,%xmm4
pmullw %xmm0,%xmm1
movdqa %xmm1,%xmm5
punpcklwd %xmm4,%xmm5
punpckhwd %xmm4,%xmm1
movdqu 0xe0(%rdi),%xmm4
movdqu 0xf0(%rdi),%xmm6
pslld  $0x1,%xmm3
psrad  $0x10,%xmm3
pslld  $0x1,%xmm2
psrad  $0x10,%xmm2
packssdw %xmm3,%xmm2
paddw  %xmm4,%xmm2
pslld  $0x1,%xmm1
psrad  $0x10,%xmm1
pslld  $0x1,%xmm5
psrad  $0x10,%xmm5
packssdw %xmm1,%xmm5
paddw  %xmm6,%xmm5
movdqu %xmm2,0xe0(%rdi)
movdqu %xmm5,0xf0(%rdi)
movdqu 0x100(%rsi),%xmm2
movdqu 0x110(%rsi),%xmm3
movdqa %xmm0,%xmm4
pmulhw %xmm2,%xmm4
pmullw %xmm0,%xmm2
movdqa %xmm2,%xmm1
punpcklwd %xmm4,%xmm1
punpckhwd %xmm4,%xmm2
movdqa %xmm0,%xmm4
pmulhw %xmm3,%xmm4
pmullw %xmm3,%xmm0
movdqa %xmm0,%xmm3
punpcklwd %xmm4,%xmm3
punpckhwd %xmm4,%xmm0
movdqu 0x100(%rdi),%xmm4
movdqu 0x110(%rdi),%xmm5
pslld  $0x1,%xmm2
psrad  $0x10,%xmm2
pslld  $0x1,%xmm1
psrad  $0x10,%xmm1
packssdw %xmm2,%xmm1
paddw  %xmm4,%xmm1
pslld  $0x1,%xmm0
psrad  $0x10,%xmm0
pslld  $0x1,%xmm3
psrad  $0x10,%xmm3
packssdw %xmm0,%xmm3
paddw  %xmm5,%xmm3
movdqu %xmm1,0x100(%rdi)
movdqu %xmm3,0x110(%rdi)
mov    $0x90,%eax
xchg   %ax,%ax
movswl (%rsi,%rax,2),%ecx
imul   %edx,%ecx
shr    $0xf,%ecx
add    %cx,(%rdi,%rax,2)
movswl 0x2(%rsi,%rax,2),%ecx
imul   %edx,%ecx
shr    $0xf,%ecx
add    %cx,0x2(%rdi,%rax,2)
add    $0x2,%rax
cmp    $0x96,%rax
jne    1640 <vec_mpy1+0x540>
ret

LLVM IR (-O0):
define void @vec_mpy1(i16* %0, i16* %1, i16 signext %2) {
%4 = alloca i16*
%5 = alloca i16*
%6 = alloca i16
%7 = alloca i32
store i16* %0, i16** %4
store i16* %1, i16** %5
store i16 %2, i16* %6
store i32 0, i32* %7
br label %8
8: ; preds = %30, %3
%9 = load i32, i32* %7
%10 = icmp slt i32 %9, 150
br i1 %10, label %11, label %33
11: ; preds = %8
%12 = load i16, i16* %6
%13 = sext i16 %12 to i32
%14 = load i16*, i16** %5
%15 = load i32, i32* %7
%16 = sext i32 %15 to i64
%17 = getelementptr inbounds i16, i16* %14, i64 %16
%18 = load i16, i16* %17
%19 = sext i16 %18 to i32
%20 = mul nsw i32 %13, %19
%21 = ashr i32 %20, 15
%22 = load i16*, i16** %4
%23 = load i32, i32* %7
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds i16, i16* %22, i64 %24
%26 = load i16, i16* %25
%27 = sext i16 %26 to i32
%28 = add nsw i32 %27, %21
%29 = trunc i32 %28 to i16
store i16 %29, i16* %25
br label %30
30: ; preds = %11
%31 = load i32, i32* %7
%32 = add nsw i32 %31, 1
store i32 %32, i32* %7
br label %8
33: ; preds = %8
ret void
}

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