From 2fdc96c7faaf999b1a05f6e9c87cc768c6e7d4ca Mon Sep 17 00:00:00 2001 From: tangaac Date: Mon, 21 Apr 2025 15:45:39 +0800 Subject: [PATCH 1/2] Pre-commit for widen shuffle mask --- .../LoongArch/lasx/widen-shuffle-mask.ll | 71 +++++++++++++++++++ .../LoongArch/lsx/widen-shuffle-mask.ll | 71 +++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 llvm/test/CodeGen/LoongArch/lasx/widen-shuffle-mask.ll create mode 100644 llvm/test/CodeGen/LoongArch/lsx/widen-shuffle-mask.ll diff --git a/llvm/test/CodeGen/LoongArch/lasx/widen-shuffle-mask.ll b/llvm/test/CodeGen/LoongArch/lasx/widen-shuffle-mask.ll new file mode 100644 index 0000000000000..783eeccc6b83d --- /dev/null +++ b/llvm/test/CodeGen/LoongArch/lasx/widen-shuffle-mask.ll @@ -0,0 +1,71 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 +; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s + +define <32 x i8> @widen_shuffle_mask_v32i8_to_v16i16(<32 x i8> %a, <32 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v32i8_to_v16i16: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI0_0) +; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI0_0) +; CHECK-NEXT: xvshuf.b $xr0, $xr1, $xr0, $xr2 +; CHECK-NEXT: ret + %r = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> + ret <32 x i8> %r +} + +define <32 x i8> @widen_shuffle_mask_v32i8_to_v8i32(<32 x i8> %a, <32 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v32i8_to_v8i32: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI1_0) +; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI1_0) +; CHECK-NEXT: xvshuf.b $xr0, $xr1, $xr0, $xr2 +; CHECK-NEXT: ret + %r = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> + ret <32 x i8> %r +} + +define <32 x i8> @widen_shuffle_mask_v32i8_to_v4i64(<32 x i8> %a, <32 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v32i8_to_v4i64: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0) +; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI2_0) +; CHECK-NEXT: xvshuf.b $xr0, $xr1, $xr0, $xr2 +; CHECK-NEXT: ret + %r = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> + ret <32 x i8> %r +} + +define <16 x i16> @widen_shuffle_mask_v16i16_to_v8i32(<16 x i16> %a, <16 x i16> %b) { +; CHECK-LABEL: widen_shuffle_mask_v16i16_to_v8i32: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI3_0) +; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI3_0) +; CHECK-NEXT: xvshuf.h $xr2, $xr1, $xr0 +; CHECK-NEXT: xvori.b $xr0, $xr2, 0 +; CHECK-NEXT: ret + %r = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> + ret <16 x i16> %r +} + +define <16 x i16> @widen_shuffle_mask_v16i16_to_v4i64(<16 x i16> %a, <16 x i16> %b) { +; CHECK-LABEL: widen_shuffle_mask_v16i16_to_v4i64: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0) +; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI4_0) +; CHECK-NEXT: xvshuf.h $xr2, $xr1, $xr0 +; CHECK-NEXT: xvori.b $xr0, $xr2, 0 +; CHECK-NEXT: ret + %r = shufflevector <16 x i16> %a, <16 x i16> %b, <16 x i32> + ret <16 x i16> %r +} + +define <8 x i32> @widen_shuffle_mask_v8i32_to_v4i64(<8 x i32> %a, <8 x i32> %b) { +; CHECK-LABEL: widen_shuffle_mask_v8i32_to_v4i64: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0) +; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI5_0) +; CHECK-NEXT: xvshuf.w $xr2, $xr1, $xr0 +; CHECK-NEXT: xvori.b $xr0, $xr2, 0 +; CHECK-NEXT: ret + %r = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> + ret <8 x i32> %r +} \ No newline at end of file diff --git a/llvm/test/CodeGen/LoongArch/lsx/widen-shuffle-mask.ll b/llvm/test/CodeGen/LoongArch/lsx/widen-shuffle-mask.ll new file mode 100644 index 0000000000000..5e8a907c7ec2e --- /dev/null +++ b/llvm/test/CodeGen/LoongArch/lsx/widen-shuffle-mask.ll @@ -0,0 +1,71 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 +; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s + +define <16 x i8> @widen_shuffle_mask_v16i8_to_v8i16(<16 x i8> %a, <16 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v16i8_to_v8i16: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI0_0) +; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI0_0) +; CHECK-NEXT: vshuf.b $vr0, $vr1, $vr0, $vr2 +; CHECK-NEXT: ret + %r = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> + ret <16 x i8> %r +} + +define <16 x i8> @widen_shuffle_mask_v16i8_to_v4i32(<16 x i8> %a, <16 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v16i8_to_v4i32: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI1_0) +; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI1_0) +; CHECK-NEXT: vshuf.b $vr0, $vr1, $vr0, $vr2 +; CHECK-NEXT: ret + %r = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> + ret <16 x i8> %r +} + +define <16 x i8> @widen_shuffle_mask_v16i8_to_v2i64(<16 x i8> %a, <16 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v16i8_to_v2i64: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0) +; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI2_0) +; CHECK-NEXT: vshuf.b $vr0, $vr1, $vr0, $vr2 +; CHECK-NEXT: ret + %r = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> + ret <16 x i8> %r +} + +define <8 x i16> @widen_shuffle_mask_v8i16_to_v4i32(<8 x i16> %a, <8 x i16> %b) { +; CHECK-LABEL: widen_shuffle_mask_v8i16_to_v4i32: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI3_0) +; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI3_0) +; CHECK-NEXT: vshuf.h $vr2, $vr1, $vr0 +; CHECK-NEXT: vori.b $vr0, $vr2, 0 +; CHECK-NEXT: ret + %r = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> + ret <8 x i16> %r +} + +define <8 x i16> @widen_shuffle_mask_v8i16_to_v2i64(<8 x i16> %a, <8 x i16> %b) { +; CHECK-LABEL: widen_shuffle_mask_v8i16_to_v2i64: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0) +; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI4_0) +; CHECK-NEXT: vshuf.h $vr2, $vr1, $vr0 +; CHECK-NEXT: vori.b $vr0, $vr2, 0 +; CHECK-NEXT: ret + %r = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> + ret <8 x i16> %r +} + +define <4 x i32> @widen_shuffle_mask_v4i32_to_v2i64(<4 x i32> %a, <4 x i32> %b) { +; CHECK-LABEL: widen_shuffle_mask_v4i32_to_v2i64: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0) +; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI5_0) +; CHECK-NEXT: vshuf.w $vr2, $vr1, $vr0 +; CHECK-NEXT: vori.b $vr0, $vr2, 0 +; CHECK-NEXT: ret + %r = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> + ret <4 x i32> %r +} \ No newline at end of file From 37dc6a41658c7ba4e7bbd0f1240467efc5eddc20 Mon Sep 17 00:00:00 2001 From: tangaac Date: Wed, 23 Apr 2025 10:22:55 +0800 Subject: [PATCH 2/2] add more tests --- .../LoongArch/lasx/widen-shuffle-mask.ll | 68 ++++++++++++++++++- .../LoongArch/lsx/widen-shuffle-mask.ll | 68 ++++++++++++++++++- 2 files changed, 134 insertions(+), 2 deletions(-) diff --git a/llvm/test/CodeGen/LoongArch/lasx/widen-shuffle-mask.ll b/llvm/test/CodeGen/LoongArch/lasx/widen-shuffle-mask.ll index 783eeccc6b83d..c32a60622f2a1 100644 --- a/llvm/test/CodeGen/LoongArch/lasx/widen-shuffle-mask.ll +++ b/llvm/test/CodeGen/LoongArch/lasx/widen-shuffle-mask.ll @@ -68,4 +68,70 @@ define <8 x i32> @widen_shuffle_mask_v8i32_to_v4i64(<8 x i32> %a, <8 x i32> %b) ; CHECK-NEXT: ret %r = shufflevector <8 x i32> %a, <8 x i32> %b, <8 x i32> ret <8 x i32> %r -} \ No newline at end of file +} + +define <32 x i8> @widen_shuffle_mask_v32i8_to_xvpackev_h(<32 x i8> %a, <32 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v32i8_to_xvpackev_h: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI6_0) +; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI6_0) +; CHECK-NEXT: xvshuf.b $xr0, $xr1, $xr0, $xr2 +; CHECK-NEXT: ret + %r = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> + ret <32 x i8> %r +} + +define <32 x i8> @widen_shuffle_mask_v32i8_to_xvpackod_h(<32 x i8> %a, <32 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v32i8_to_xvpackod_h: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI7_0) +; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI7_0) +; CHECK-NEXT: xvshuf.b $xr0, $xr1, $xr0, $xr2 +; CHECK-NEXT: ret + %r = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> + ret <32 x i8> %r +} + +define <32 x i8> @widen_shuffle_mask_v32i8_to_xvpickev_h(<32 x i8> %a, <32 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v32i8_to_xvpickev_h: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI8_0) +; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI8_0) +; CHECK-NEXT: xvshuf.b $xr0, $xr1, $xr0, $xr2 +; CHECK-NEXT: ret + %r = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> + ret <32 x i8> %r +} + +define <32 x i8> @widen_shuffle_mask_v32i8_to_xvpickod_h(<32 x i8> %a, <32 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v32i8_to_xvpickod_h: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI9_0) +; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI9_0) +; CHECK-NEXT: xvshuf.b $xr0, $xr1, $xr0, $xr2 +; CHECK-NEXT: ret + %r = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> + ret <32 x i8> %r +} + +define <32 x i8> @widen_shuffle_mask_v32i8_to_xvilvl_h(<32 x i8> %a, <32 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v32i8_to_xvilvl_h: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI10_0) +; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI10_0) +; CHECK-NEXT: xvshuf.b $xr0, $xr1, $xr0, $xr2 +; CHECK-NEXT: ret + %r = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> + ret <32 x i8> %r +} + +define <32 x i8> @widen_shuffle_mask_v32i8_to_xvilvh_h(<32 x i8> %a, <32 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v32i8_to_xvilvh_h: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI11_0) +; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI11_0) +; CHECK-NEXT: xvshuf.b $xr0, $xr1, $xr0, $xr2 +; CHECK-NEXT: ret + %r = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> + ret <32 x i8> %r +} diff --git a/llvm/test/CodeGen/LoongArch/lsx/widen-shuffle-mask.ll b/llvm/test/CodeGen/LoongArch/lsx/widen-shuffle-mask.ll index 5e8a907c7ec2e..35457ffa59586 100644 --- a/llvm/test/CodeGen/LoongArch/lsx/widen-shuffle-mask.ll +++ b/llvm/test/CodeGen/LoongArch/lsx/widen-shuffle-mask.ll @@ -68,4 +68,70 @@ define <4 x i32> @widen_shuffle_mask_v4i32_to_v2i64(<4 x i32> %a, <4 x i32> %b) ; CHECK-NEXT: ret %r = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> ret <4 x i32> %r -} \ No newline at end of file +} + +define <16 x i8> @widen_shuffle_mask_v16i8_to_vpackev_h(<16 x i8> %a, <16 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v16i8_to_vpackev_h: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI6_0) +; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI6_0) +; CHECK-NEXT: vshuf.b $vr0, $vr1, $vr0, $vr2 +; CHECK-NEXT: ret + %r = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> + ret <16 x i8> %r +} + +define <16 x i8> @widen_shuffle_mask_v16i8_to_vpackod_h(<16 x i8> %a, <16 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v16i8_to_vpackod_h: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI7_0) +; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI7_0) +; CHECK-NEXT: vshuf.b $vr0, $vr1, $vr0, $vr2 +; CHECK-NEXT: ret + %r = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> + ret <16 x i8> %r +} + +define <16 x i8> @widen_shuffle_mask_v16i8_to_vpickev_h(<16 x i8> %a, <16 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v16i8_to_vpickev_h: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI8_0) +; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI8_0) +; CHECK-NEXT: vshuf.b $vr0, $vr1, $vr0, $vr2 +; CHECK-NEXT: ret + %r = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> + ret <16 x i8> %r +} + +define <16 x i8> @widen_shuffle_mask_v16i8_to_vpickod_h(<16 x i8> %a, <16 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v16i8_to_vpickod_h: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI9_0) +; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI9_0) +; CHECK-NEXT: vshuf.b $vr0, $vr1, $vr0, $vr2 +; CHECK-NEXT: ret + %r = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> + ret <16 x i8> %r +} + +define <16 x i8> @widen_shuffle_mask_v16i8_to_vilvl_h(<16 x i8> %a, <16 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v16i8_to_vilvl_h: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI10_0) +; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI10_0) +; CHECK-NEXT: vshuf.b $vr0, $vr1, $vr0, $vr2 +; CHECK-NEXT: ret + %r = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> + ret <16 x i8> %r +} + +define <16 x i8> @widen_shuffle_mask_v16i8_to_vilvh_h(<16 x i8> %a, <16 x i8> %b) { +; CHECK-LABEL: widen_shuffle_mask_v16i8_to_vilvh_h: +; CHECK: # %bb.0: +; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI11_0) +; CHECK-NEXT: vld $vr2, $a0, %pc_lo12(.LCPI11_0) +; CHECK-NEXT: vshuf.b $vr0, $vr1, $vr0, $vr2 +; CHECK-NEXT: ret + %r = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> + ret <16 x i8> %r +}