33; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-GI
44
55define <8 x i16 > @test_sshll_v8i8 (<8 x i8 > %a ) {
6- ; CHECK-SD-LABEL: test_sshll_v8i8:
7- ; CHECK-SD: // %bb.0:
8- ; CHECK-SD-NEXT: sshll v0.8h, v0.8b, #3
9- ; CHECK-SD-NEXT: ret
10- ;
11- ; CHECK-GI-LABEL: test_sshll_v8i8:
12- ; CHECK-GI: // %bb.0:
13- ; CHECK-GI-NEXT: sshll v0.8h, v0.8b, #0
14- ; CHECK-GI-NEXT: shl v0.8h, v0.8h, #3
15- ; CHECK-GI-NEXT: ret
6+ ; CHECK-LABEL: test_sshll_v8i8:
7+ ; CHECK: // %bb.0:
8+ ; CHECK-NEXT: sshll v0.8h, v0.8b, #3
9+ ; CHECK-NEXT: ret
1610 %1 = sext <8 x i8 > %a to <8 x i16 >
1711 %tmp = shl <8 x i16 > %1 , <i16 3 , i16 3 , i16 3 , i16 3 , i16 3 , i16 3 , i16 3 , i16 3 >
1812 ret <8 x i16 > %tmp
@@ -36,16 +30,10 @@ define <8 x i16> @test_sshll_v8i8_big(<8 x i8> %a) {
3630}
3731
3832define <4 x i32 > @test_sshll_v4i16 (<4 x i16 > %a ) {
39- ; CHECK-SD-LABEL: test_sshll_v4i16:
40- ; CHECK-SD: // %bb.0:
41- ; CHECK-SD-NEXT: sshll v0.4s, v0.4h, #9
42- ; CHECK-SD-NEXT: ret
43- ;
44- ; CHECK-GI-LABEL: test_sshll_v4i16:
45- ; CHECK-GI: // %bb.0:
46- ; CHECK-GI-NEXT: sshll v0.4s, v0.4h, #0
47- ; CHECK-GI-NEXT: shl v0.4s, v0.4s, #9
48- ; CHECK-GI-NEXT: ret
33+ ; CHECK-LABEL: test_sshll_v4i16:
34+ ; CHECK: // %bb.0:
35+ ; CHECK-NEXT: sshll v0.4s, v0.4h, #9
36+ ; CHECK-NEXT: ret
4937 %1 = sext <4 x i16 > %a to <4 x i32 >
5038 %tmp = shl <4 x i32 > %1 , <i32 9 , i32 9 , i32 9 , i32 9 >
5139 ret <4 x i32 > %tmp
@@ -69,16 +57,10 @@ define <4 x i32> @test_sshll_v4i16_big(<4 x i16> %a) {
6957}
7058
7159define <2 x i64 > @test_sshll_v2i32 (<2 x i32 > %a ) {
72- ; CHECK-SD-LABEL: test_sshll_v2i32:
73- ; CHECK-SD: // %bb.0:
74- ; CHECK-SD-NEXT: sshll v0.2d, v0.2s, #19
75- ; CHECK-SD-NEXT: ret
76- ;
77- ; CHECK-GI-LABEL: test_sshll_v2i32:
78- ; CHECK-GI: // %bb.0:
79- ; CHECK-GI-NEXT: sshll v0.2d, v0.2s, #0
80- ; CHECK-GI-NEXT: shl v0.2d, v0.2d, #19
81- ; CHECK-GI-NEXT: ret
60+ ; CHECK-LABEL: test_sshll_v2i32:
61+ ; CHECK: // %bb.0:
62+ ; CHECK-NEXT: sshll v0.2d, v0.2s, #19
63+ ; CHECK-NEXT: ret
8264 %1 = sext <2 x i32 > %a to <2 x i64 >
8365 %tmp = shl <2 x i64 > %1 , <i64 19 , i64 19 >
8466 ret <2 x i64 > %tmp
@@ -102,16 +84,10 @@ define <2 x i64> @test_sshll_v2i32_big(<2 x i32> %a) {
10284}
10385
10486define <8 x i16 > @test_ushll_v8i8 (<8 x i8 > %a ) {
105- ; CHECK-SD-LABEL: test_ushll_v8i8:
106- ; CHECK-SD: // %bb.0:
107- ; CHECK-SD-NEXT: ushll v0.8h, v0.8b, #3
108- ; CHECK-SD-NEXT: ret
109- ;
110- ; CHECK-GI-LABEL: test_ushll_v8i8:
111- ; CHECK-GI: // %bb.0:
112- ; CHECK-GI-NEXT: ushll v0.8h, v0.8b, #0
113- ; CHECK-GI-NEXT: shl v0.8h, v0.8h, #3
114- ; CHECK-GI-NEXT: ret
87+ ; CHECK-LABEL: test_ushll_v8i8:
88+ ; CHECK: // %bb.0:
89+ ; CHECK-NEXT: ushll v0.8h, v0.8b, #3
90+ ; CHECK-NEXT: ret
11591 %1 = zext <8 x i8 > %a to <8 x i16 >
11692 %tmp = shl <8 x i16 > %1 , <i16 3 , i16 3 , i16 3 , i16 3 , i16 3 , i16 3 , i16 3 , i16 3 >
11793 ret <8 x i16 > %tmp
@@ -129,16 +105,10 @@ define <8 x i16> @test_ushll_v8i8_big(<8 x i8> %a) {
129105}
130106
131107define <4 x i32 > @test_ushll_v4i16 (<4 x i16 > %a ) {
132- ; CHECK-SD-LABEL: test_ushll_v4i16:
133- ; CHECK-SD: // %bb.0:
134- ; CHECK-SD-NEXT: ushll v0.4s, v0.4h, #9
135- ; CHECK-SD-NEXT: ret
136- ;
137- ; CHECK-GI-LABEL: test_ushll_v4i16:
138- ; CHECK-GI: // %bb.0:
139- ; CHECK-GI-NEXT: ushll v0.4s, v0.4h, #0
140- ; CHECK-GI-NEXT: shl v0.4s, v0.4s, #9
141- ; CHECK-GI-NEXT: ret
108+ ; CHECK-LABEL: test_ushll_v4i16:
109+ ; CHECK: // %bb.0:
110+ ; CHECK-NEXT: ushll v0.4s, v0.4h, #9
111+ ; CHECK-NEXT: ret
142112 %1 = zext <4 x i16 > %a to <4 x i32 >
143113 %tmp = shl <4 x i32 > %1 , <i32 9 , i32 9 , i32 9 , i32 9 >
144114 ret <4 x i32 > %tmp
@@ -156,16 +126,10 @@ define <4 x i32> @test_ushll_v4i16_big(<4 x i16> %a) {
156126}
157127
158128define <2 x i64 > @test_ushll_v2i32 (<2 x i32 > %a ) {
159- ; CHECK-SD-LABEL: test_ushll_v2i32:
160- ; CHECK-SD: // %bb.0:
161- ; CHECK-SD-NEXT: ushll v0.2d, v0.2s, #19
162- ; CHECK-SD-NEXT: ret
163- ;
164- ; CHECK-GI-LABEL: test_ushll_v2i32:
165- ; CHECK-GI: // %bb.0:
166- ; CHECK-GI-NEXT: ushll v0.2d, v0.2s, #0
167- ; CHECK-GI-NEXT: shl v0.2d, v0.2d, #19
168- ; CHECK-GI-NEXT: ret
129+ ; CHECK-LABEL: test_ushll_v2i32:
130+ ; CHECK: // %bb.0:
131+ ; CHECK-NEXT: ushll v0.2d, v0.2s, #19
132+ ; CHECK-NEXT: ret
169133 %1 = zext <2 x i32 > %a to <2 x i64 >
170134 %tmp = shl <2 x i64 > %1 , <i64 19 , i64 19 >
171135 ret <2 x i64 > %tmp
@@ -190,8 +154,8 @@ define <8 x i16> @test_sshll2_v16i8(<16 x i8> %a) {
190154;
191155; CHECK-GI-LABEL: test_sshll2_v16i8:
192156; CHECK-GI: // %bb.0:
193- ; CHECK-GI-NEXT: sshll2 v0.8h , v0.16b, #0
194- ; CHECK-GI-NEXT: shl v0.8h, v0.8h , #3
157+ ; CHECK-GI-NEXT: mov d0 , v0.d[1]
158+ ; CHECK-GI-NEXT: sshll v0.8h, v0.8b , #3
195159; CHECK-GI-NEXT: ret
196160 %1 = shufflevector <16 x i8 > %a , <16 x i8 > undef , <8 x i32 > <i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 >
197161 %2 = sext <8 x i8 > %1 to <8 x i16 >
@@ -225,8 +189,8 @@ define <4 x i32> @test_sshll2_v8i16(<8 x i16> %a) {
225189;
226190; CHECK-GI-LABEL: test_sshll2_v8i16:
227191; CHECK-GI: // %bb.0:
228- ; CHECK-GI-NEXT: sshll2 v0.4s , v0.8h, #0
229- ; CHECK-GI-NEXT: shl v0.4s, v0.4s , #9
192+ ; CHECK-GI-NEXT: mov d0 , v0.d[1]
193+ ; CHECK-GI-NEXT: sshll v0.4s, v0.4h , #9
230194; CHECK-GI-NEXT: ret
231195 %1 = shufflevector <8 x i16 > %a , <8 x i16 > undef , <4 x i32 > <i32 4 , i32 5 , i32 6 , i32 7 >
232196 %2 = sext <4 x i16 > %1 to <4 x i32 >
@@ -260,8 +224,8 @@ define <2 x i64> @test_sshll2_v4i32(<4 x i32> %a) {
260224;
261225; CHECK-GI-LABEL: test_sshll2_v4i32:
262226; CHECK-GI: // %bb.0:
263- ; CHECK-GI-NEXT: sshll2 v0.2d , v0.4s, #0
264- ; CHECK-GI-NEXT: shl v0.2d, v0.2d , #19
227+ ; CHECK-GI-NEXT: mov d0 , v0.d[1]
228+ ; CHECK-GI-NEXT: sshll v0.2d, v0.2s , #19
265229; CHECK-GI-NEXT: ret
266230 %1 = shufflevector <4 x i32 > %a , <4 x i32 > undef , <2 x i32 > <i32 2 , i32 3 >
267231 %2 = sext <2 x i32 > %1 to <2 x i64 >
@@ -295,8 +259,8 @@ define <8 x i16> @test_ushll2_v16i8(<16 x i8> %a) {
295259;
296260; CHECK-GI-LABEL: test_ushll2_v16i8:
297261; CHECK-GI: // %bb.0:
298- ; CHECK-GI-NEXT: ushll2 v0.8h , v0.16b, #0
299- ; CHECK-GI-NEXT: shl v0.8h, v0.8h , #3
262+ ; CHECK-GI-NEXT: mov d0 , v0.d[1]
263+ ; CHECK-GI-NEXT: ushll v0.8h, v0.8b , #3
300264; CHECK-GI-NEXT: ret
301265 %1 = shufflevector <16 x i8 > %a , <16 x i8 > undef , <8 x i32 > <i32 8 , i32 9 , i32 10 , i32 11 , i32 12 , i32 13 , i32 14 , i32 15 >
302266 %2 = zext <8 x i8 > %1 to <8 x i16 >
@@ -324,8 +288,8 @@ define <4 x i32> @test_ushll2_v8i16(<8 x i16> %a) {
324288;
325289; CHECK-GI-LABEL: test_ushll2_v8i16:
326290; CHECK-GI: // %bb.0:
327- ; CHECK-GI-NEXT: ushll2 v0.4s , v0.8h, #0
328- ; CHECK-GI-NEXT: shl v0.4s, v0.4s , #9
291+ ; CHECK-GI-NEXT: mov d0 , v0.d[1]
292+ ; CHECK-GI-NEXT: ushll v0.4s, v0.4h , #9
329293; CHECK-GI-NEXT: ret
330294 %1 = shufflevector <8 x i16 > %a , <8 x i16 > undef , <4 x i32 > <i32 4 , i32 5 , i32 6 , i32 7 >
331295 %2 = zext <4 x i16 > %1 to <4 x i32 >
@@ -353,8 +317,8 @@ define <2 x i64> @test_ushll2_v4i32(<4 x i32> %a) {
353317;
354318; CHECK-GI-LABEL: test_ushll2_v4i32:
355319; CHECK-GI: // %bb.0:
356- ; CHECK-GI-NEXT: ushll2 v0.2d , v0.4s, #0
357- ; CHECK-GI-NEXT: shl v0.2d, v0.2d , #19
320+ ; CHECK-GI-NEXT: mov d0 , v0.d[1]
321+ ; CHECK-GI-NEXT: ushll v0.2d, v0.2s , #19
358322; CHECK-GI-NEXT: ret
359323 %1 = shufflevector <4 x i32 > %a , <4 x i32 > undef , <2 x i32 > <i32 2 , i32 3 >
360324 %2 = zext <2 x i32 > %1 to <2 x i64 >
0 commit comments