1+ ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+ ; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s
3+
4+ define <32 x i8 > @widen_shuffle_mask_v32i8_to_v16i16 (<32 x i8 > %a , <32 x i8 > %b ) {
5+ ; CHECK-LABEL: widen_shuffle_mask_v32i8_to_v16i16:
6+ ; CHECK: # %bb.0:
7+ ; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI0_0)
8+ ; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI0_0)
9+ ; CHECK-NEXT: xvshuf.b $xr0, $xr1, $xr0, $xr2
10+ ; CHECK-NEXT: ret
11+ %r = shufflevector <32 x i8 > %a , <32 x i8 > %b , <32 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 32 , i32 33 , i32 34 , i32 35 , i32 24 , i32 25 , i32 26 , i32 27 , i32 48 , i32 49 , i32 50 , i32 51 , i32 52 , i32 53 , i32 54 , i32 55 , i32 60 , i32 61 , i32 30 , i32 31 >
12+ ret <32 x i8 > %r
13+ }
14+
15+ define <32 x i8 > @widen_shuffle_mask_v32i8_to_v8i32 (<32 x i8 > %a , <32 x i8 > %b ) {
16+ ; CHECK-LABEL: widen_shuffle_mask_v32i8_to_v8i32:
17+ ; CHECK: # %bb.0:
18+ ; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI1_0)
19+ ; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI1_0)
20+ ; CHECK-NEXT: xvshuf.b $xr0, $xr1, $xr0, $xr2
21+ ; CHECK-NEXT: ret
22+ %r = shufflevector <32 x i8 > %a , <32 x i8 > %b , <32 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 32 , i32 33 , i32 34 , i32 35 , i32 24 , i32 25 , i32 26 , i32 27 , i32 48 , i32 49 , i32 50 , i32 51 , i32 52 , i32 53 , i32 54 , i32 55 , i32 60 , i32 61 , i32 62 , i32 63 >
23+ ret <32 x i8 > %r
24+ }
25+
26+ define <32 x i8 > @widen_shuffle_mask_v32i8_to_v4i64 (<32 x i8 > %a , <32 x i8 > %b ) {
27+ ; CHECK-LABEL: widen_shuffle_mask_v32i8_to_v4i64:
28+ ; CHECK: # %bb.0:
29+ ; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0)
30+ ; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI2_0)
31+ ; CHECK-NEXT: xvshuf.b $xr0, $xr1, $xr0, $xr2
32+ ; CHECK-NEXT: ret
33+ %r = shufflevector <32 x i8 > %a , <32 x i8 > %b , <32 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 4 , i32 5 , i32 6 , i32 7 , i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 , i32 24 , i32 25 , i32 26 , i32 27 , i32 28 , i32 29 , i32 30 , i32 31 , i32 48 , i32 49 , i32 50 , i32 51 , i32 52 , i32 53 , i32 54 , i32 55 >
34+ ret <32 x i8 > %r
35+ }
36+
37+ define <16 x i16 > @widen_shuffle_mask_v16i16_to_v8i32 (<16 x i16 > %a , <16 x i16 > %b ) {
38+ ; CHECK-LABEL: widen_shuffle_mask_v16i16_to_v8i32:
39+ ; CHECK: # %bb.0:
40+ ; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI3_0)
41+ ; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI3_0)
42+ ; CHECK-NEXT: xvshuf.h $xr2, $xr1, $xr0
43+ ; CHECK-NEXT: xvori.b $xr0, $xr2, 0
44+ ; CHECK-NEXT: ret
45+ %r = shufflevector <16 x i16 > %a , <16 x i16 > %b , <16 x i32 > <i32 0 , i32 1 , i32 6 , i32 7 , i32 16 , i32 17 , i32 2 , i32 3 , i32 10 , i32 11 , i32 12 , i32 13 , i32 24 , i32 25 , i32 26 , i32 27 >
46+ ret <16 x i16 > %r
47+ }
48+
49+ define <16 x i16 > @widen_shuffle_mask_v16i16_to_v4i64 (<16 x i16 > %a , <16 x i16 > %b ) {
50+ ; CHECK-LABEL: widen_shuffle_mask_v16i16_to_v4i64:
51+ ; CHECK: # %bb.0:
52+ ; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0)
53+ ; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI4_0)
54+ ; CHECK-NEXT: xvshuf.h $xr2, $xr1, $xr0
55+ ; CHECK-NEXT: xvori.b $xr0, $xr2, 0
56+ ; CHECK-NEXT: ret
57+ %r = shufflevector <16 x i16 > %a , <16 x i16 > %b , <16 x i32 > <i32 0 , i32 1 , i32 2 , i32 3 , i32 20 , i32 21 , i32 22 , i32 23 , i32 12 , i32 13 , i32 14 , i32 15 , i32 28 , i32 29 , i32 30 , i32 31 >
58+ ret <16 x i16 > %r
59+ }
60+
61+ define <8 x i32 > @widen_shuffle_mask_v8i32_to_v4i64 (<8 x i32 > %a , <8 x i32 > %b ) {
62+ ; CHECK-LABEL: widen_shuffle_mask_v8i32_to_v4i64:
63+ ; CHECK: # %bb.0:
64+ ; CHECK-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0)
65+ ; CHECK-NEXT: xvld $xr2, $a0, %pc_lo12(.LCPI5_0)
66+ ; CHECK-NEXT: xvshuf.w $xr2, $xr1, $xr0
67+ ; CHECK-NEXT: xvori.b $xr0, $xr2, 0
68+ ; CHECK-NEXT: ret
69+ %r = shufflevector <8 x i32 > %a , <8 x i32 > %b , <8 x i32 > <i32 0 , i32 1 , i32 8 , i32 9 , i32 14 , i32 15 , i32 6 , i32 7 >
70+ ret <8 x i32 > %r
71+ }
0 commit comments