; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s ; ; Test that vperm is not used if a single unpack is enough. define <4 x i32> @fun0(<4 x i32>* %Src) nounwind { ; CHECK-LABEL: fun0: ; CHECK-NOT: vperm %tmp = load <4 x i32>, <4 x i32>* %Src %tmp2 = shufflevector <4 x i32> zeroinitializer, <4 x i32> %tmp, <4 x i32> ret <4 x i32> %tmp2 } define void @fun1(i8 %Src, <32 x i8>* %Dst) nounwind { ; CHECK-LABEL: fun1: ; CHECK-NOT: vperm %I0 = insertelement <16 x i8> undef, i8 %Src, i32 0 %I1 = insertelement <16 x i8> %I0, i8 %Src, i32 1 %I2 = insertelement <16 x i8> %I1, i8 %Src, i32 2 %I3 = insertelement <16 x i8> %I2, i8 %Src, i32 3 %I4 = insertelement <16 x i8> %I3, i8 %Src, i32 4 %I5 = insertelement <16 x i8> %I4, i8 %Src, i32 5 %I6 = insertelement <16 x i8> %I5, i8 %Src, i32 6 %I7 = insertelement <16 x i8> %I6, i8 %Src, i32 7 %I8 = insertelement <16 x i8> %I7, i8 %Src, i32 8 %I9 = insertelement <16 x i8> %I8, i8 %Src, i32 9 %I10 = insertelement <16 x i8> %I9, i8 %Src, i32 10 %I11 = insertelement <16 x i8> %I10, i8 %Src, i32 11 %I12 = insertelement <16 x i8> %I11, i8 %Src, i32 12 %I13 = insertelement <16 x i8> %I12, i8 %Src, i32 13 %I14 = insertelement <16 x i8> %I13, i8 %Src, i32 14 %I15 = insertelement <16 x i8> %I14, i8 %Src, i32 15 %tmp = shufflevector <16 x i8> zeroinitializer, <16 x i8> %I15, <32 x i32> %tmp9 = shufflevector <32 x i8> undef, <32 x i8> %tmp, <32 x i32> store <32 x i8> %tmp9, <32 x i8>* %Dst ret void }