; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -march=hexagon < %s | FileCheck %s define void @f0(ptr %a0, ptr %a1, ptr %a2) #0 { ; CHECK-LABEL: f0: ; CHECK: // %bb.0: // %b0 ; CHECK-NEXT: { ; CHECK-NEXT: r7 = #124 ; CHECK-NEXT: v0 = vmem(r0+#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: v1 = vmem(r1+#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: v1:0.w = vmpy(v0.h,v1.h) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: v1:0.w = vadd(v1:0.w,v1:0.w) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: v1:0 = vdeal(v1,v0,r7) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: v0.h = vpacko(v1.w,v0.w) ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: vmem(r2+#0) = v0.new ; CHECK-NEXT: } b0: %v0 = load <64 x i16>, ptr %a0, align 128 %v1 = load <64 x i16>, ptr %a1, align 128 %v2 = sext <64 x i16> %v0 to <64 x i32> %v3 = sext <64 x i16> %v1 to <64 x i32> %0 = trunc <64 x i32> %v2 to <64 x i16> %1 = trunc <64 x i32> %v3 to <64 x i16> %2 = bitcast <64 x i16> %0 to <32 x i32> %3 = bitcast <64 x i16> %1 to <32 x i32> %4 = call <64 x i32> @llvm.hexagon.V6.vmpyhv.128B(<32 x i32> %2, <32 x i32> %3) %5 = add <64 x i32> %4, %4 %6 = shufflevector <64 x i32> %5, <64 x i32> %5, <32 x i32> %7 = shufflevector <64 x i32> %5, <64 x i32> %5, <32 x i32> %8 = shufflevector <32 x i32> %6, <32 x i32> %7, <64 x i32> %9 = bitcast <64 x i32> %8 to <128 x i16> %10 = shufflevector <128 x i16> %9, <128 x i16> poison, <64 x i32> %11 = sext <64 x i16> %10 to <64 x i32> %v6 = trunc <64 x i32> %11 to <64 x i16> store <64 x i16> %v6, ptr %a2, align 128 ret void } declare <64 x i32> @llvm.hexagon.V6.vmpyhv.128B(<32 x i32>, <32 x i32>) #0 attributes #0 = { nounwind "target-features"="+v66,+hvxv66,+hvx-length128b" }