; 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 %b4, !prof !3 b1: ; preds = %b3, %b0 br label %b2 b2: ; preds = %b2, %b1 %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> %v1, <64 x i32> undef, <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 = tail call <64 x i32> @llvm.hexagon.V6.vaddh.dv.128B(<64 x i32> %v6, <64 x i32> undef) br i1 undef, label %b3, label %b2 b3: ; preds = %b2 %v8 = tail call <32 x i32> @llvm.hexagon.V6.hi.128B(<64 x i32> %v7) %v9 = tail call <32 x i32> @llvm.hexagon.V6.vasrhubsat.128B(<32 x i32> %v8, <32 x i32> undef, i32 4) store <32 x i32> %v9, <32 x i32>* undef, align 1, !tbaa !7 br label %b1 b4: ; preds = %b0 ret void } ; Function Attrs: nounwind readnone declare <64 x i32> @llvm.hexagon.V6.vaddh.dv.128B(<64 x i32>, <64 x i32>) #1 ; Function Attrs: nounwind readnone declare <32 x i32> @llvm.hexagon.V6.hi.128B(<64 x i32>) #1 ; Function Attrs: nounwind readnone declare <32 x i32> @llvm.hexagon.V6.vasrhubsat.128B(<32 x i32>, <32 x i32>, 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 = !{!"conv3x3", !6}