130 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx %s -o - | FileCheck %s3; RUN: llc --mtriple=loongarch64 --mattr=+lasx %s -o - | FileCheck %s4 5;; xvrepl128vei.b6define <32 x i8> @shufflevector_v32i8(<32 x i8> %a, <32 x i8> %b) {7; CHECK-LABEL: shufflevector_v32i8:8; CHECK: # %bb.0:9; CHECK-NEXT: xvrepl128vei.b $xr0, $xr0, 110; CHECK-NEXT: ret11 %c = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1,12 i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17>13 ret <32 x i8> %c14}15 16;; xvrepl128vei.b17define <32 x i8> @shufflevector_v32i8_undef(<32 x i8> %a) {18; CHECK-LABEL: shufflevector_v32i8_undef:19; CHECK: # %bb.0:20; CHECK-NEXT: xvrepl128vei.b $xr0, $xr0, 121; CHECK-NEXT: ret22 %c = shufflevector <32 x i8> %a, <32 x i8> poison, <32 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1,23 i32 33, i32 33, i32 33, i32 33, i32 33, i32 33, i32 33, i32 33, i32 33, i32 33, i32 33, i32 33, i32 33, i32 33, i32 33, i32 33>24 ret <32 x i8> %c25}26 27;; xvrepl128vei.h28define <16 x i16> @shufflevector_v16i16(<16 x i16> %a, <16 x i16> %b) {29; CHECK-LABEL: shufflevector_v16i16:30; CHECK: # %bb.0:31; CHECK-NEXT: xvrepl128vei.h $xr0, $xr0, 332; CHECK-NEXT: ret33 %c = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3,34 i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11, i32 11>35 ret <16 x i16> %c36}37 38;; xvrepl128vei.h39define <16 x i16> @shufflevector_v16i16_undef(<16 x i16> %a) {40; CHECK-LABEL: shufflevector_v16i16_undef:41; CHECK: # %bb.0:42; CHECK-NEXT: xvrepl128vei.h $xr0, $xr0, 343; CHECK-NEXT: ret44 %c = shufflevector <16 x i16> %a, <16 x i16> poison, <16 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3,45 i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17>46 ret <16 x i16> %c47}48 49;; xvrepl128vei.w50define <8 x i32> @shufflevector_v8i32(<8 x i32> %a, <8 x i32> %b) {51; CHECK-LABEL: shufflevector_v8i32:52; CHECK: # %bb.0:53; CHECK-NEXT: xvpermi.d $xr0, $xr0, 7854; CHECK-NEXT: xvrepl128vei.w $xr0, $xr0, 355; CHECK-NEXT: ret56 %c = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> <i32 7, i32 7, i32 7, i32 7, i32 3, i32 3, i32 3, i32 3>57 ret <8 x i32> %c58}59 60;; xvrepl128vei.w61define <8 x i32> @shufflevector_v8i32_undef(<8 x i32> %a) {62; CHECK-LABEL: shufflevector_v8i32_undef:63; CHECK: # %bb.0:64; CHECK-NEXT: xvrepl128vei.w $xr0, $xr0, 265; CHECK-NEXT: ret66 %c = shufflevector <8 x i32> %a, <8 x i32> poison, <8 x i32> <i32 2, i32 2, i32 2, i32 2, i32 8, i32 8, i32 8, i32 8>67 ret <8 x i32> %c68}69 70;; xvrepl128vei.d71define <4 x i64> @shufflevector_v4i64(<4 x i64> %a, <4 x i64> %b) {72; CHECK-LABEL: shufflevector_v4i64:73; CHECK: # %bb.0:74; CHECK-NEXT: xvrepl128vei.d $xr0, $xr0, 175; CHECK-NEXT: ret76 %c = shufflevector <4 x i64> %a, <4 x i64> %b, <4 x i32> <i32 1, i32 1, i32 3, i32 3>77 ret <4 x i64> %c78}79 80;; xvrepl128vei.d81define <4 x i64> @shufflevector_v4i64_undef(<4 x i64> %a) {82; CHECK-LABEL: shufflevector_v4i64_undef:83; CHECK: # %bb.0:84; CHECK-NEXT: xvrepl128vei.d $xr0, $xr0, 185; CHECK-NEXT: ret86 %c = shufflevector <4 x i64> %a, <4 x i64> poison, <4 x i32> <i32 1, i32 1, i32 5, i32 5>87 ret <4 x i64> %c88}89 90;; xvrepl128vei.w91define <8 x float> @shufflevector_v8f32(<8 x float> %a, <8 x float> %b) {92; CHECK-LABEL: shufflevector_v8f32:93; CHECK: # %bb.0:94; CHECK-NEXT: xvrepl128vei.w $xr0, $xr0, 395; CHECK-NEXT: ret96 %c = shufflevector <8 x float> %a, <8 x float> %b, <8 x i32> <i32 3, i32 3, i32 3, i32 3, i32 7, i32 7, i32 7, i32 7>97 ret <8 x float> %c98}99 100;; xvrepl128vei.w101define <8 x float> @shufflevector_v8f32_undef(<8 x float> %a) {102; CHECK-LABEL: shufflevector_v8f32_undef:103; CHECK: # %bb.0:104; CHECK-NEXT: xvpermi.d $xr0, $xr0, 238105; CHECK-NEXT: xvrepl128vei.w $xr0, $xr0, 1106; CHECK-NEXT: ret107 %c = shufflevector <8 x float> %a, <8 x float> poison, <8 x i32> <i32 5, i32 5, i32 5, i32 5, i32 9, i32 9, i32 9, i32 9>108 ret <8 x float> %c109}110 111;; xvrepl128vei.d112define <4 x double> @shufflevector_v4f64(<4 x double> %a, <4 x double> %b) {113; CHECK-LABEL: shufflevector_v4f64:114; CHECK: # %bb.0:115; CHECK-NEXT: xvrepl128vei.d $xr0, $xr1, 1116; CHECK-NEXT: ret117 %c = shufflevector <4 x double> %a, <4 x double> %b, <4 x i32> <i32 5, i32 5, i32 7, i32 7>118 ret <4 x double> %c119}120 121;; xvrepl128vei.d122define <4 x double> @shufflevector_v4f64_undef(<4 x double> %a) {123; CHECK-LABEL: shufflevector_v4f64_undef:124; CHECK: # %bb.0:125; CHECK-NEXT: xvrepl128vei.d $xr0, $xr0, 0126; CHECK-NEXT: ret127 %c = shufflevector <4 x double> %a, <4 x double> poison, <4 x i32> <i32 0, i32 0, i32 7, i32 7>128 ret <4 x double> %c129}130