xref: /llvm-project/llvm/test/CodeGen/LoongArch/lasx/bitreverse.ll (revision 953838dceaff3728b9aa53ea4259efca15f38f66)
120d4742eSZhaoQi; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
220d4742eSZhaoQi; RUN: llc --mtriple=loongarch64 -mattr=+lasx --verify-machineinstrs < %s \
320d4742eSZhaoQi; RUN:   | FileCheck %s
420d4742eSZhaoQi
520d4742eSZhaoQideclare <32 x i8> @llvm.bitreverse.v32i8(<32 x i8>)
620d4742eSZhaoQi
720d4742eSZhaoQidefine <32 x i8> @test_bitreverse_v32i8(<32 x i8> %a) nounwind {
820d4742eSZhaoQi; CHECK-LABEL: test_bitreverse_v32i8:
920d4742eSZhaoQi; CHECK:       # %bb.0:
10*953838dcSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 0
11*953838dcSZhaoQi; CHECK-NEXT:    bitrev.8b $a0, $a0
12*953838dcSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 0
13*953838dcSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 1
14*953838dcSZhaoQi; CHECK-NEXT:    bitrev.8b $a0, $a0
15*953838dcSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 1
16*953838dcSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 2
17*953838dcSZhaoQi; CHECK-NEXT:    bitrev.8b $a0, $a0
18*953838dcSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 2
19*953838dcSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 3
20*953838dcSZhaoQi; CHECK-NEXT:    bitrev.8b $a0, $a0
21*953838dcSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 3
22*953838dcSZhaoQi; CHECK-NEXT:    xvori.b $xr0, $xr1, 0
2320d4742eSZhaoQi; CHECK-NEXT:    ret
2420d4742eSZhaoQi  %b = call <32 x i8> @llvm.bitreverse.v32i8(<32 x i8> %a)
2520d4742eSZhaoQi  ret <32 x i8> %b
2620d4742eSZhaoQi}
2720d4742eSZhaoQi
2820d4742eSZhaoQideclare <16 x i16> @llvm.bitreverse.v16i16(<16 x i16>)
2920d4742eSZhaoQi
3020d4742eSZhaoQidefine <16 x i16> @test_bitreverse_v16i16(<16 x i16> %a) nounwind {
3120d4742eSZhaoQi; CHECK-LABEL: test_bitreverse_v16i16:
3220d4742eSZhaoQi; CHECK:       # %bb.0:
33*953838dcSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 0
34*953838dcSZhaoQi; CHECK-NEXT:    bitrev.d $a0, $a0
35*953838dcSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 0
36*953838dcSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 1
37*953838dcSZhaoQi; CHECK-NEXT:    bitrev.d $a0, $a0
38*953838dcSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 1
39*953838dcSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 2
40*953838dcSZhaoQi; CHECK-NEXT:    bitrev.d $a0, $a0
41*953838dcSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 2
42*953838dcSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 3
43*953838dcSZhaoQi; CHECK-NEXT:    bitrev.d $a0, $a0
44*953838dcSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 3
45*953838dcSZhaoQi; CHECK-NEXT:    xvshuf4i.h $xr0, $xr1, 27
4620d4742eSZhaoQi; CHECK-NEXT:    ret
4720d4742eSZhaoQi  %b = call <16 x i16> @llvm.bitreverse.v16i16(<16 x i16> %a)
4820d4742eSZhaoQi  ret <16 x i16> %b
4920d4742eSZhaoQi}
5020d4742eSZhaoQi
5120d4742eSZhaoQideclare <8 x i32> @llvm.bitreverse.v8i32(<8 x i32>)
5220d4742eSZhaoQi
5320d4742eSZhaoQidefine <8 x i32> @test_bitreverse_v8i32(<8 x i32> %a) nounwind {
5420d4742eSZhaoQi; CHECK-LABEL: test_bitreverse_v8i32:
5520d4742eSZhaoQi; CHECK:       # %bb.0:
56*953838dcSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 0
57*953838dcSZhaoQi; CHECK-NEXT:    bitrev.d $a0, $a0
58*953838dcSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 0
59*953838dcSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 1
60*953838dcSZhaoQi; CHECK-NEXT:    bitrev.d $a0, $a0
61*953838dcSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 1
62*953838dcSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 2
63*953838dcSZhaoQi; CHECK-NEXT:    bitrev.d $a0, $a0
64*953838dcSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 2
65*953838dcSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 3
66*953838dcSZhaoQi; CHECK-NEXT:    bitrev.d $a0, $a0
67*953838dcSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 3
68*953838dcSZhaoQi; CHECK-NEXT:    xvshuf4i.w $xr0, $xr1, 177
6920d4742eSZhaoQi; CHECK-NEXT:    ret
7020d4742eSZhaoQi  %b = call <8 x i32> @llvm.bitreverse.v8i32(<8 x i32> %a)
7120d4742eSZhaoQi  ret <8 x i32> %b
7220d4742eSZhaoQi}
7320d4742eSZhaoQi
7420d4742eSZhaoQideclare <4 x i64> @llvm.bitreverse.v4i64(<4 x i64>)
7520d4742eSZhaoQi
7620d4742eSZhaoQidefine <4 x i64> @test_bitreverse_v4i64(<4 x i64> %a) nounwind {
7720d4742eSZhaoQi; CHECK-LABEL: test_bitreverse_v4i64:
7820d4742eSZhaoQi; CHECK:       # %bb.0:
7920d4742eSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 0
8020d4742eSZhaoQi; CHECK-NEXT:    bitrev.d $a0, $a0
8120d4742eSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 0
8220d4742eSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 1
8320d4742eSZhaoQi; CHECK-NEXT:    bitrev.d $a0, $a0
8420d4742eSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 1
8520d4742eSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 2
8620d4742eSZhaoQi; CHECK-NEXT:    bitrev.d $a0, $a0
8720d4742eSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 2
8820d4742eSZhaoQi; CHECK-NEXT:    xvpickve2gr.d $a0, $xr0, 3
8920d4742eSZhaoQi; CHECK-NEXT:    bitrev.d $a0, $a0
9020d4742eSZhaoQi; CHECK-NEXT:    xvinsgr2vr.d $xr1, $a0, 3
9120d4742eSZhaoQi; CHECK-NEXT:    xvori.b $xr0, $xr1, 0
9220d4742eSZhaoQi; CHECK-NEXT:    ret
9320d4742eSZhaoQi  %b = call <4 x i64> @llvm.bitreverse.v4i64(<4 x i64> %a)
9420d4742eSZhaoQi  ret <4 x i64> %b
9520d4742eSZhaoQi}
96