brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · be24192 Raw
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,+lsx < %s | FileCheck %s3; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s4 5;; TODO For these special shuffle mask, we can lower it to vbsll + vbsrl + vor.6 7define <16 x i8> @byte_rotate_v16i8_1(<16 x i8> %a, <16 x i8> %b) nounwind {8; CHECK-LABEL: byte_rotate_v16i8_1:9; CHECK:       # %bb.0:10; CHECK-NEXT:    vbsrl.v $vr0, $vr0, 511; CHECK-NEXT:    vbsll.v $vr1, $vr1, 1112; CHECK-NEXT:    vor.v $vr0, $vr1, $vr013; CHECK-NEXT:    ret14  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20>15  ret <16 x i8> %shuffle16}17 18define <16 x i8> @byte_rotate_v16i8_2(<16 x i8> %a, <16 x i8> %b) nounwind {19; CHECK-LABEL: byte_rotate_v16i8_2:20; CHECK:       # %bb.0:21; CHECK-NEXT:    vbsrl.v $vr1, $vr0, 1122; CHECK-NEXT:    vbsll.v $vr0, $vr0, 523; CHECK-NEXT:    vor.v $vr0, $vr0, $vr124; CHECK-NEXT:    ret25  %shuffle = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10>26  ret <16 x i8> %shuffle27}28 29define <16 x i8> @byte_rotate_v16i8_3(<16 x i8> %a) nounwind {30; CHECK-LABEL: byte_rotate_v16i8_3:31; CHECK:       # %bb.0:32; CHECK-NEXT:    vbsrl.v $vr1, $vr0, 1133; CHECK-NEXT:    vbsll.v $vr0, $vr0, 534; CHECK-NEXT:    vor.v $vr0, $vr0, $vr135; CHECK-NEXT:    ret36  %shuffle = shufflevector <16 x i8> %a, <16 x i8> poison, <16 x i32> <i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10>37  ret <16 x i8> %shuffle38}39 40define <8 x i16> @byte_rotate_v8i16_1(<8 x i16> %a, <8 x i16> %b) nounwind {41; CHECK-LABEL: byte_rotate_v8i16_1:42; CHECK:       # %bb.0:43; CHECK-NEXT:    vbsrl.v $vr1, $vr1, 1044; CHECK-NEXT:    vbsll.v $vr0, $vr0, 645; CHECK-NEXT:    vor.v $vr0, $vr0, $vr146; CHECK-NEXT:    ret47  %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4>48  ret <8 x i16> %shuffle49}50 51define <8 x i16> @byte_rotate_v8i16_2(<8 x i16> %a, <8 x i16> %b) nounwind {52; CHECK-LABEL: byte_rotate_v8i16_2:53; CHECK:       # %bb.0:54; CHECK-NEXT:    vbsrl.v $vr0, $vr0, 655; CHECK-NEXT:    vbsll.v $vr1, $vr1, 1056; CHECK-NEXT:    vor.v $vr0, $vr1, $vr057; CHECK-NEXT:    ret58  %shuffle = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10>59  ret <8 x i16> %shuffle60}61 62define <8 x i16> @byte_rotate_v8i16_3(<8 x i16> %a) nounwind {63; CHECK-LABEL: byte_rotate_v8i16_3:64; CHECK:       # %bb.0:65; CHECK-NEXT:    vbsrl.v $vr1, $vr0, 1066; CHECK-NEXT:    vbsll.v $vr0, $vr0, 667; CHECK-NEXT:    vor.v $vr0, $vr0, $vr168; CHECK-NEXT:    ret69  %shuffle = shufflevector <8 x i16> %a, <8 x i16> poison, <8 x i32> <i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4>70  ret <8 x i16> %shuffle71}72 73define <4 x i32> @byte_rotate_v4i32_1(<4 x i32> %a, <4 x i32> %b) nounwind {74; CHECK-LABEL: byte_rotate_v4i32_1:75; CHECK:       # %bb.0:76; CHECK-NEXT:    vbsrl.v $vr1, $vr1, 1277; CHECK-NEXT:    vbsll.v $vr0, $vr0, 478; CHECK-NEXT:    vor.v $vr0, $vr0, $vr179; CHECK-NEXT:    ret80    %shuffle = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 7, i32 0, i32 1, i32 2>81    ret <4 x i32> %shuffle82}83 84define <4 x i32> @byte_rotate_v4i32_2(<4 x i32> %a, <4 x i32> %b) nounwind {85; CHECK-LABEL: byte_rotate_v4i32_2:86; CHECK:       # %bb.0:87; CHECK-NEXT:    vbsrl.v $vr0, $vr0, 488; CHECK-NEXT:    vbsll.v $vr1, $vr1, 1289; CHECK-NEXT:    vor.v $vr0, $vr1, $vr090; CHECK-NEXT:    ret91    %shuffle = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 2, i32 3, i32 4>92    ret <4 x i32> %shuffle93}94 95define <4 x i32> @byte_rotate_v4i32_3(<4 x i32> %a) nounwind {96; CHECK-LABEL: byte_rotate_v4i32_3:97; CHECK:       # %bb.0:98; CHECK-NEXT:    vshuf4i.w $vr0, $vr0, 14799; CHECK-NEXT:    ret100    %shuffle = shufflevector <4 x i32> %a, <4 x i32> poison, <4 x i32> <i32 3, i32 0, i32 1, i32 2>101    ret <4 x i32> %shuffle102}103 104define <2 x i64> @byte_rotate_v2i64_1(<2 x i64> %a, <2 x i64> %b) nounwind {105; CHECK-LABEL: byte_rotate_v2i64_1:106; CHECK:       # %bb.0:107; CHECK-NEXT:    vshuf4i.d $vr0, $vr1, 3108; CHECK-NEXT:    ret109    %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 3, i32 0>110    ret <2 x i64> %shuffle111}112 113define <2 x i64> @byte_rotate_v2i64_2(<2 x i64> %a, <2 x i64> %b) nounwind {114; CHECK-LABEL: byte_rotate_v2i64_2:115; CHECK:       # %bb.0:116; CHECK-NEXT:    vshuf4i.d $vr0, $vr1, 9117; CHECK-NEXT:    ret118    %shuffle = shufflevector <2 x i64> %a, <2 x i64> %b, <2 x i32> <i32 1, i32 2>119    ret <2 x i64> %shuffle120}121 122define <2 x i64> @byte_rotate_v2i64_3(<2 x i64> %a) nounwind {123; CHECK-LABEL: byte_rotate_v2i64_3:124; CHECK:       # %bb.0:125; CHECK-NEXT:    vshuf4i.d $vr0, $vr0, 1126; CHECK-NEXT:    ret127    %shuffle = shufflevector <2 x i64> %a, <2 x i64> poison, <2 x i32> <i32 1, i32 0>128    ret <2 x i64> %shuffle129}130