; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 ; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s | FileCheck %s ; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s define <32 x i8> @shuffle_to_xvslli_h_8(<32 x i8> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvslli_h_8: ; CHECK: # %bb.0: ; CHECK-NEXT: xvslli.h $xr0, $xr0, 8 ; CHECK-NEXT: ret %shuffle = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %shuffle } define <32 x i8> @shuffle_to_xvsrli_h_8(<32 x i8> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvsrli_h_8: ; CHECK: # %bb.0: ; CHECK-NEXT: xvsrli.h $xr0, $xr0, 8 ; CHECK-NEXT: ret %shuffle = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %shuffle } define <32 x i8> @shuffle_to_xvslli_w_8(<32 x i8> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvslli_w_8: ; CHECK: # %bb.0: ; CHECK-NEXT: xvslli.w $xr0, $xr0, 8 ; CHECK-NEXT: ret %shuffle = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %shuffle } define <32 x i8> @shuffle_to_xvsrli_w_8(<32 x i8> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvsrli_w_8: ; CHECK: # %bb.0: ; CHECK-NEXT: xvsrli.w $xr0, $xr0, 8 ; CHECK-NEXT: ret %shuffle = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %shuffle } define <16 x i16> @shuffle_to_xvslli_w_16(<16 x i16> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvslli_w_16: ; CHECK: # %bb.0: ; CHECK-NEXT: xvslli.w $xr0, $xr0, 16 ; CHECK-NEXT: ret %shuffle = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> ret <16 x i16> %shuffle } define <16 x i16> @shuffle_to_xvsrli_w_16(<16 x i16> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvsrli_w_16: ; CHECK: # %bb.0: ; CHECK-NEXT: xvsrli.w $xr0, $xr0, 16 ; CHECK-NEXT: ret %shuffle = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> ret <16 x i16> %shuffle } define <32 x i8> @shuffle_to_xvslli_w_24(<32 x i8> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvslli_w_24: ; CHECK: # %bb.0: ; CHECK-NEXT: xvslli.w $xr0, $xr0, 24 ; CHECK-NEXT: ret %shuffle = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %shuffle } define <32 x i8> @shuffle_to_xvsrli_w_24(<32 x i8> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvsrli_w_24: ; CHECK: # %bb.0: ; CHECK-NEXT: xvsrli.w $xr0, $xr0, 24 ; CHECK-NEXT: ret %shuffle = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %shuffle } define <32 x i8> @shuffle_to_xvslli_d_8(<32 x i8> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvslli_d_8: ; CHECK: # %bb.0: ; CHECK-NEXT: xvslli.d $xr0, $xr0, 8 ; CHECK-NEXT: ret %shuffle = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %shuffle } define <32 x i8> @shuffle_to_xvsrli_d_8(<32 x i8> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvsrli_d_8: ; CHECK: # %bb.0: ; CHECK-NEXT: xvsrli.d $xr0, $xr0, 8 ; CHECK-NEXT: ret %shuffle = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %shuffle } define <16 x i16> @shuffle_to_xvslli_d_16(<16 x i16> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvslli_d_16: ; CHECK: # %bb.0: ; CHECK-NEXT: xvslli.d $xr0, $xr0, 16 ; CHECK-NEXT: ret %shuffle = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> ret <16 x i16> %shuffle } define <16 x i16> @shuffle_to_xvsrli_d_16(<16 x i16> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvsrli_d_16: ; CHECK: # %bb.0: ; CHECK-NEXT: xvsrli.d $xr0, $xr0, 16 ; CHECK-NEXT: ret %shuffle = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> ret <16 x i16> %shuffle } define <32 x i8> @shuffle_to_xvslli_d_24(<32 x i8> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvslli_d_24: ; CHECK: # %bb.0: ; CHECK-NEXT: xvslli.d $xr0, $xr0, 24 ; CHECK-NEXT: ret %shuffle = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %shuffle } define <32 x i8> @shuffle_to_xvsrli_d_24(<32 x i8> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvsrli_d_24: ; CHECK: # %bb.0: ; CHECK-NEXT: xvsrli.d $xr0, $xr0, 24 ; CHECK-NEXT: ret %shuffle = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %shuffle } define <8 x i32> @shuffle_to_xvslli_d_32(<8 x i32> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvslli_d_32: ; CHECK: # %bb.0: ; CHECK-NEXT: xvslli.d $xr0, $xr0, 32 ; CHECK-NEXT: ret %shuffle = shufflevector <8 x i32> %a, <8 x i32> zeroinitializer, <8 x i32> ret <8 x i32> %shuffle } define <8 x i32> @shuffle_to_xvsrli_d_32(<8 x i32> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvsrli_d_32: ; CHECK: # %bb.0: ; CHECK-NEXT: xvsrli.d $xr0, $xr0, 32 ; CHECK-NEXT: ret %shuffle = shufflevector <8 x i32> %a, <8 x i32> zeroinitializer, <8 x i32> ret <8 x i32> %shuffle } define <32 x i8> @shuffle_to_xvslli_d_40(<32 x i8> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvslli_d_40: ; CHECK: # %bb.0: ; CHECK-NEXT: xvslli.d $xr0, $xr0, 40 ; CHECK-NEXT: ret %shuffle = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %shuffle } define <32 x i8> @shuffle_to_xvsrli_d_40(<32 x i8> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvsrli_d_40: ; CHECK: # %bb.0: ; CHECK-NEXT: xvsrli.d $xr0, $xr0, 40 ; CHECK-NEXT: ret %shuffle = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %shuffle } define <16 x i16> @shuffle_to_xvslli_d_48(<16 x i16> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvslli_d_48: ; CHECK: # %bb.0: ; CHECK-NEXT: xvslli.d $xr0, $xr0, 48 ; CHECK-NEXT: ret %shuffle = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> ret <16 x i16> %shuffle } define <16 x i16> @shuffle_to_xvsrli_d_48(<16 x i16> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvsrli_d_48: ; CHECK: # %bb.0: ; CHECK-NEXT: xvsrli.d $xr0, $xr0, 48 ; CHECK-NEXT: ret %shuffle = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> ret <16 x i16> %shuffle } define <32 x i8> @shuffle_to_xvslli_d_56(<32 x i8> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvslli_d_56: ; CHECK: # %bb.0: ; CHECK-NEXT: xvslli.d $xr0, $xr0, 56 ; CHECK-NEXT: ret %shuffle = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %shuffle } define <32 x i8> @shuffle_to_xvsrli_d_56(<32 x i8> %a) nounwind { ; CHECK-LABEL: shuffle_to_xvsrli_d_56: ; CHECK: # %bb.0: ; CHECK-NEXT: xvsrli.d $xr0, $xr0, 56 ; CHECK-NEXT: ret %shuffle = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> ret <32 x i8> %shuffle }