; RUN: llc < %s -mtriple=powerpc64le-unknown-linux-gnu -mattr=+altivec -mattr=-vsx -mcpu=pwr7 | FileCheck %s define void @VPKUHUM_xy(<16 x i8>* %A, <16 x i8>* %B) { entry: ; CHECK: VPKUHUM_xy: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = load <16 x i8>, <16 x i8>* %B %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> ; CHECK: lvx [[REG1:[0-9]+]] ; CHECK: lvx [[REG2:[0-9]+]] ; CHECK: vpkuhum [[REG3:[0-9]+]], [[REG2]], [[REG1]] store <16 x i8> %tmp3, <16 x i8>* %A ret void } define void @VPKUHUM_xx(<16 x i8>* %A) { entry: ; CHECK: VPKUHUM_xx: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> ; CHECK: vpkuhum store <16 x i8> %tmp2, <16 x i8>* %A ret void } define void @VPKUWUM_xy(<16 x i8>* %A, <16 x i8>* %B) { entry: ; CHECK: VPKUWUM_xy: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = load <16 x i8>, <16 x i8>* %B %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> ; CHECK: lvx [[REG1:[0-9]+]] ; CHECK: lvx [[REG2:[0-9]+]] ; CHECK: vpkuwum [[REG3:[0-9]+]], [[REG2]], [[REG1]] store <16 x i8> %tmp3, <16 x i8>* %A ret void } define void @VPKUWUM_xx(<16 x i8>* %A) { entry: ; CHECK: VPKUWUM_xx: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> ; CHECK: vpkuwum store <16 x i8> %tmp2, <16 x i8>* %A ret void } define void @VMRGLB_xy(<16 x i8>* %A, <16 x i8>* %B) { entry: ; CHECK: VMRGLB_xy: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = load <16 x i8>, <16 x i8>* %B %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> ; CHECK: lvx [[REG1:[0-9]+]] ; CHECK: lvx [[REG2:[0-9]+]] ; CHECK: vmrglb [[REG3:[0-9]+]], [[REG2]], [[REG1]] store <16 x i8> %tmp3, <16 x i8>* %A ret void } define void @VMRGLB_xx(<16 x i8>* %A) { entry: ; CHECK: VMRGLB_xx: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> ; CHECK: vmrglb store <16 x i8> %tmp2, <16 x i8>* %A ret void } define void @VMRGHB_xy(<16 x i8>* %A, <16 x i8>* %B) { entry: ; CHECK: VMRGHB_xy: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = load <16 x i8>, <16 x i8>* %B %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> ; CHECK: lvx [[REG1:[0-9]+]] ; CHECK: lvx [[REG2:[0-9]+]] ; CHECK: vmrghb [[REG3:[0-9]+]], [[REG2]], [[REG1]] store <16 x i8> %tmp3, <16 x i8>* %A ret void } define void @VMRGHB_xx(<16 x i8>* %A) { entry: ; CHECK: VMRGHB_xx: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> ; CHECK: vmrghb store <16 x i8> %tmp2, <16 x i8>* %A ret void } define void @VMRGLH_xy(<16 x i8>* %A, <16 x i8>* %B) { entry: ; CHECK: VMRGLH_xy: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = load <16 x i8>, <16 x i8>* %B %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> ; CHECK: lvx [[REG1:[0-9]+]] ; CHECK: lvx [[REG2:[0-9]+]] ; CHECK: vmrglh [[REG3:[0-9]+]], [[REG2]], [[REG1]] store <16 x i8> %tmp3, <16 x i8>* %A ret void } define void @VMRGLH_xx(<16 x i8>* %A) { entry: ; CHECK: VMRGLH_xx: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> ; CHECK: vmrglh store <16 x i8> %tmp2, <16 x i8>* %A ret void } define void @VMRGHH_xy(<16 x i8>* %A, <16 x i8>* %B) { entry: ; CHECK: VMRGHH_xy: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = load <16 x i8>, <16 x i8>* %B %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> ; CHECK: lvx [[REG1:[0-9]+]] ; CHECK: lvx [[REG2:[0-9]+]] ; CHECK: vmrghh [[REG3:[0-9]+]], [[REG2]], [[REG1]] store <16 x i8> %tmp3, <16 x i8>* %A ret void } define void @VMRGHH_xx(<16 x i8>* %A) { entry: ; CHECK: VMRGHH_xx: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> ; CHECK: vmrghh store <16 x i8> %tmp2, <16 x i8>* %A ret void } define void @VMRGLW_xy(<16 x i8>* %A, <16 x i8>* %B) { entry: ; CHECK: VMRGLW_xy: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = load <16 x i8>, <16 x i8>* %B %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> ; CHECK: lvx [[REG1:[0-9]+]] ; CHECK: lvx [[REG2:[0-9]+]] ; CHECK: vmrglw [[REG3:[0-9]+]], [[REG2]], [[REG1]] store <16 x i8> %tmp3, <16 x i8>* %A ret void } define void @VMRGLW_xx(<16 x i8>* %A) { entry: ; CHECK: VMRGLW_xx: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> ; CHECK: vmrglw store <16 x i8> %tmp2, <16 x i8>* %A ret void } define void @VMRGHW_xy(<16 x i8>* %A, <16 x i8>* %B) { entry: ; CHECK: VMRGHW_xy: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = load <16 x i8>, <16 x i8>* %B %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> ; CHECK: lvx [[REG1:[0-9]+]] ; CHECK: lvx [[REG2:[0-9]+]] ; CHECK: vmrghw [[REG3:[0-9]+]], [[REG2]], [[REG1]] store <16 x i8> %tmp3, <16 x i8>* %A ret void } define void @VMRGHW_xx(<16 x i8>* %A) { entry: ; CHECK: VMRGHW_xx: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> ; CHECK: vmrghw store <16 x i8> %tmp2, <16 x i8>* %A ret void } define void @VSLDOI_xy(<16 x i8>* %A, <16 x i8>* %B) { entry: ; CHECK: VSLDOI_xy: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = load <16 x i8>, <16 x i8>* %B %tmp3 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp2, <16 x i32> ; CHECK: lvx [[REG1:[0-9]+]] ; CHECK: lvx [[REG2:[0-9]+]] ; CHECK: vsldoi [[REG3:[0-9]+]], [[REG2]], [[REG1]], 4 store <16 x i8> %tmp3, <16 x i8>* %A ret void } define void @VSLDOI_xx(<16 x i8>* %A) { entry: ; CHECK: VSLDOI_xx: %tmp = load <16 x i8>, <16 x i8>* %A %tmp2 = shufflevector <16 x i8> %tmp, <16 x i8> %tmp, <16 x i32> ; CHECK: vsldoi {{[0-9]+}}, [[REG1:[0-9]+]], [[REG1]], 4 store <16 x i8> %tmp2, <16 x i8>* %A ret void }