1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2; RUN: llc --mtriple=loongarch64 -mattr=+lsx --verify-machineinstrs < %s \ 3; RUN: | FileCheck %s 4 5declare <16 x i8> @llvm.bitreverse.v16i8(<16 x i8>) 6 7define <16 x i8> @test_bitreverse_v16i8(<16 x i8> %a) nounwind { 8; CHECK-LABEL: test_bitreverse_v16i8: 9; CHECK: # %bb.0: 10; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0 11; CHECK-NEXT: bitrev.8b $a0, $a0 12; CHECK-NEXT: vinsgr2vr.d $vr1, $a0, 0 13; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1 14; CHECK-NEXT: bitrev.8b $a0, $a0 15; CHECK-NEXT: vinsgr2vr.d $vr1, $a0, 1 16; CHECK-NEXT: vori.b $vr0, $vr1, 0 17; CHECK-NEXT: ret 18 %b = call <16 x i8> @llvm.bitreverse.v16i8(<16 x i8> %a) 19 ret <16 x i8> %b 20} 21 22declare <8 x i16> @llvm.bitreverse.v8i16(<8 x i16>) 23 24define <8 x i16> @test_bitreverse_v8i16(<8 x i16> %a) nounwind { 25; CHECK-LABEL: test_bitreverse_v8i16: 26; CHECK: # %bb.0: 27; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0 28; CHECK-NEXT: bitrev.d $a0, $a0 29; CHECK-NEXT: vinsgr2vr.d $vr1, $a0, 0 30; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1 31; CHECK-NEXT: bitrev.d $a0, $a0 32; CHECK-NEXT: vinsgr2vr.d $vr1, $a0, 1 33; CHECK-NEXT: vshuf4i.h $vr0, $vr1, 27 34; CHECK-NEXT: ret 35 %b = call <8 x i16> @llvm.bitreverse.v8i16(<8 x i16> %a) 36 ret <8 x i16> %b 37} 38 39declare <4 x i32> @llvm.bitreverse.v4i32(<4 x i32>) 40 41define <4 x i32> @test_bitreverse_v4i32(<4 x i32> %a) nounwind { 42; CHECK-LABEL: test_bitreverse_v4i32: 43; CHECK: # %bb.0: 44; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0 45; CHECK-NEXT: bitrev.d $a0, $a0 46; CHECK-NEXT: vinsgr2vr.d $vr1, $a0, 0 47; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1 48; CHECK-NEXT: bitrev.d $a0, $a0 49; CHECK-NEXT: vinsgr2vr.d $vr1, $a0, 1 50; CHECK-NEXT: vshuf4i.w $vr0, $vr1, 177 51; CHECK-NEXT: ret 52 %b = call <4 x i32> @llvm.bitreverse.v4i32(<4 x i32> %a) 53 ret <4 x i32> %b 54} 55 56declare <2 x i64> @llvm.bitreverse.v2i64(<2 x i64>) 57 58define <2 x i64> @test_bitreverse_v2i64(<2 x i64> %a) nounwind { 59; CHECK-LABEL: test_bitreverse_v2i64: 60; CHECK: # %bb.0: 61; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 0 62; CHECK-NEXT: bitrev.d $a0, $a0 63; CHECK-NEXT: vinsgr2vr.d $vr1, $a0, 0 64; CHECK-NEXT: vpickve2gr.d $a0, $vr0, 1 65; CHECK-NEXT: bitrev.d $a0, $a0 66; CHECK-NEXT: vinsgr2vr.d $vr1, $a0, 1 67; CHECK-NEXT: vori.b $vr0, $vr1, 0 68; CHECK-NEXT: ret 69 %b = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %a) 70 ret <2 x i64> %b 71} 72