; RUN: llc -march=hexagon -O2 < %s ; REQUIRES: asserts target triple = "hexagon-unknown--elf" ; Function Attrs: nounwind define void @f0() #0 { b0: br i1 undef, label %b1, label %b6, !prof !3 b1: ; preds = %b0 br i1 undef, label %b2, label %b3, !prof !3 b2: ; preds = %b1 unreachable b3: ; preds = %b1 br label %b4 b4: ; preds = %b4, %b3 %v0 = load <32 x i32>, <32 x i32>* undef, align 512, !tbaa !4 %v1 = shufflevector <32 x i32> %v0, <32 x i32> undef, <64 x i32> %v2 = shufflevector <64 x i32> undef, <64 x i32> %v1, <128 x i32> %v3 = trunc <128 x i32> %v2 to <128 x i16> %v4 = mul nsw <128 x i16> undef, %v3 %v5 = bitcast <128 x i16> %v4 to <64 x i32> %v6 = tail call <64 x i32> @llvm.hexagon.V6.vaddh.dv.128B(<64 x i32> undef, <64 x i32> %v5) %v7 = bitcast <64 x i32> %v6 to <128 x i16> %v8 = shufflevector <128 x i16> %v7, <128 x i16> undef, <64 x i32> br i1 undef, label %b5, label %b4 b5: ; preds = %b4 store <64 x i16> %v8, <64 x i16>* undef, align 1024, !tbaa !7 br label %b6 b6: ; preds = %b5, %b0 ret void } ; Function Attrs: nounwind readnone declare <64 x i32> @llvm.hexagon.V6.vaddh.dv.128B(<64 x i32>, <64 x i32>) #1 attributes #0 = { nounwind "target-cpu"="hexagonv60" "target-features"="+hvx,+hvx-length128b" } attributes #1 = { nounwind readnone } !llvm.module.flags = !{!0, !1, !2} !0 = !{i32 2, !"halide_use_soft_float_abi", i32 0} !1 = !{i32 2, !"halide_mcpu", !"hexagonv60"} !2 = !{i32 2, !"halide_mattrs", !"+hvx"} !3 = !{!"branch_weights", i32 1073741824, i32 0} !4 = !{!5, !5, i64 0} !5 = !{!"mask", !6} !6 = !{!"Halide buffer"} !7 = !{!8, !8, i64 0} !8 = !{!"sum.width64.base64", !9} !9 = !{!"sum.width128.base0", !10} !10 = !{!"sum.width256.base0", !11} !11 = !{!"sum.width512.base0", !12} !12 = !{!"sum.width1024.base0", !13} !13 = !{!"sum", !6}