99define void @lshr_trunc_i16_load_scalable (ptr %src , ptr %dst ) #0 {
1010; CHECK-LABEL: lshr_trunc_i16_load_scalable:
1111; CHECK: // %bb.0:
12- ; CHECK-NEXT: ldr z0, [x0]
13- ; CHECK-NEXT: ldr z1, [x0, #1, mul vl]
14- ; CHECK-NEXT: lsr z1.h, z1.h, #8
15- ; CHECK-NEXT: lsr z0.h, z0.h, #8
16- ; CHECK-NEXT: uzp1 z0.b, z0.b, z1.b
12+ ; CHECK-NEXT: ldr z0, [x0, #1, mul vl]
13+ ; CHECK-NEXT: ldr z1, [x0]
14+ ; CHECK-NEXT: uzp2 z0.b, z1.b, z0.b
1715; CHECK-NEXT: str z0, [x1]
1816; CHECK-NEXT: ret
1917;
2018; BE-LABEL: lshr_trunc_i16_load_scalable:
2119; BE: // %bb.0:
2220; BE-NEXT: ptrue p0.h
23- ; BE-NEXT: ld1h { z0.h }, p0/z, [x0]
24- ; BE-NEXT: ld1h { z1.h }, p0/z, [x0, #1, mul vl ]
21+ ; BE-NEXT: ld1h { z0.h }, p0/z, [x0, #1, mul vl ]
22+ ; BE-NEXT: ld1h { z1.h }, p0/z, [x0]
2523; BE-NEXT: ptrue p0.b
26- ; BE-NEXT: lsr z1.h, z1.h, #8
27- ; BE-NEXT: lsr z0.h, z0.h, #8
28- ; BE-NEXT: uzp1 z0.b, z0.b, z1.b
24+ ; BE-NEXT: uzp2 z0.b, z1.b, z0.b
2925; BE-NEXT: st1b { z0.b }, p0, [x1]
3026; BE-NEXT: ret
3127 %x = load <vscale x 16 x i16 >, ptr %src , align 2
@@ -61,23 +57,19 @@ define void @lshr_trunc_i16_load_fixed_length(ptr %src, ptr %dst) #0 {
6157define void @ashr_trunc_i16_load (ptr %src , ptr %dst )#0 {
6258; CHECK-LABEL: ashr_trunc_i16_load:
6359; CHECK: // %bb.0:
64- ; CHECK-NEXT: ldr z0, [x0]
65- ; CHECK-NEXT: ldr z1, [x0, #1, mul vl]
66- ; CHECK-NEXT: lsr z1.h, z1.h, #8
67- ; CHECK-NEXT: lsr z0.h, z0.h, #8
68- ; CHECK-NEXT: uzp1 z0.b, z0.b, z1.b
60+ ; CHECK-NEXT: ldr z0, [x0, #1, mul vl]
61+ ; CHECK-NEXT: ldr z1, [x0]
62+ ; CHECK-NEXT: uzp2 z0.b, z1.b, z0.b
6963; CHECK-NEXT: str z0, [x1]
7064; CHECK-NEXT: ret
7165;
7266; BE-LABEL: ashr_trunc_i16_load:
7367; BE: // %bb.0:
7468; BE-NEXT: ptrue p0.h
75- ; BE-NEXT: ld1h { z0.h }, p0/z, [x0]
76- ; BE-NEXT: ld1h { z1.h }, p0/z, [x0, #1, mul vl ]
69+ ; BE-NEXT: ld1h { z0.h }, p0/z, [x0, #1, mul vl ]
70+ ; BE-NEXT: ld1h { z1.h }, p0/z, [x0]
7771; BE-NEXT: ptrue p0.b
78- ; BE-NEXT: lsr z1.h, z1.h, #8
79- ; BE-NEXT: lsr z0.h, z0.h, #8
80- ; BE-NEXT: uzp1 z0.b, z0.b, z1.b
72+ ; BE-NEXT: uzp2 z0.b, z1.b, z0.b
8173; BE-NEXT: st1b { z0.b }, p0, [x1]
8274; BE-NEXT: ret
8375 %x = load <vscale x 16 x i16 >, ptr %src , align 2
@@ -90,23 +82,19 @@ define void @ashr_trunc_i16_load(ptr %src, ptr %dst)#0 {
9082define void @lshr_trunc_i32_load (ptr %src , ptr %dst ) #0 {
9183; CHECK-LABEL: lshr_trunc_i32_load:
9284; CHECK: // %bb.0:
93- ; CHECK-NEXT: ldr z0, [x0]
94- ; CHECK-NEXT: ldr z1, [x0, #1, mul vl]
95- ; CHECK-NEXT: lsr z1.s, z1.s, #16
96- ; CHECK-NEXT: lsr z0.s, z0.s, #16
97- ; CHECK-NEXT: uzp1 z0.h, z0.h, z1.h
85+ ; CHECK-NEXT: ldr z0, [x0, #1, mul vl]
86+ ; CHECK-NEXT: ldr z1, [x0]
87+ ; CHECK-NEXT: uzp2 z0.h, z1.h, z0.h
9888; CHECK-NEXT: str z0, [x1]
9989; CHECK-NEXT: ret
10090;
10191; BE-LABEL: lshr_trunc_i32_load:
10292; BE: // %bb.0:
10393; BE-NEXT: ptrue p0.s
104- ; BE-NEXT: ld1w { z0.s }, p0/z, [x0]
105- ; BE-NEXT: ld1w { z1.s }, p0/z, [x0, #1, mul vl ]
94+ ; BE-NEXT: ld1w { z0.s }, p0/z, [x0, #1, mul vl ]
95+ ; BE-NEXT: ld1w { z1.s }, p0/z, [x0]
10696; BE-NEXT: ptrue p0.h
107- ; BE-NEXT: lsr z1.s, z1.s, #16
108- ; BE-NEXT: lsr z0.s, z0.s, #16
109- ; BE-NEXT: uzp1 z0.h, z0.h, z1.h
97+ ; BE-NEXT: uzp2 z0.h, z1.h, z0.h
11098; BE-NEXT: st1h { z0.h }, p0, [x1]
11199; BE-NEXT: ret
112100 %x = load <vscale x 8 x i32 >, ptr %src , align 2
@@ -119,23 +107,19 @@ define void @lshr_trunc_i32_load(ptr %src, ptr %dst) #0 {
119107define void @lshr_trunc_i64_load (ptr %src , ptr %dst ) #0 {
120108; CHECK-LABEL: lshr_trunc_i64_load:
121109; CHECK: // %bb.0:
122- ; CHECK-NEXT: ldr z0, [x0]
123- ; CHECK-NEXT: ldr z1, [x0, #1, mul vl]
124- ; CHECK-NEXT: lsr z1.d, z1.d, #32
125- ; CHECK-NEXT: lsr z0.d, z0.d, #32
126- ; CHECK-NEXT: uzp1 z0.s, z0.s, z1.s
110+ ; CHECK-NEXT: ldr z0, [x0, #1, mul vl]
111+ ; CHECK-NEXT: ldr z1, [x0]
112+ ; CHECK-NEXT: uzp2 z0.s, z1.s, z0.s
127113; CHECK-NEXT: str z0, [x1]
128114; CHECK-NEXT: ret
129115;
130116; BE-LABEL: lshr_trunc_i64_load:
131117; BE: // %bb.0:
132118; BE-NEXT: ptrue p0.d
133- ; BE-NEXT: ld1d { z0.d }, p0/z, [x0]
134- ; BE-NEXT: ld1d { z1.d }, p0/z, [x0, #1, mul vl ]
119+ ; BE-NEXT: ld1d { z0.d }, p0/z, [x0, #1, mul vl ]
120+ ; BE-NEXT: ld1d { z1.d }, p0/z, [x0]
135121; BE-NEXT: ptrue p0.s
136- ; BE-NEXT: lsr z1.d, z1.d, #32
137- ; BE-NEXT: lsr z0.d, z0.d, #32
138- ; BE-NEXT: uzp1 z0.s, z0.s, z1.s
122+ ; BE-NEXT: uzp2 z0.s, z1.s, z0.s
139123; BE-NEXT: st1w { z0.s }, p0, [x1]
140124; BE-NEXT: ret
141125 %x = load <vscale x 4 x i64 >, ptr %src , align 2
0 commit comments