3
3
; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-GI
4
4
5
5
define <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
16
10
%1 = sext <8 x i8 > %a to <8 x i16 >
17
11
%tmp = shl <8 x i16 > %1 , <i16 3 , i16 3 , i16 3 , i16 3 , i16 3 , i16 3 , i16 3 , i16 3 >
18
12
ret <8 x i16 > %tmp
19
13
}
20
14
21
15
define <4 x i32 > @test_sshll_v4i16 (<4 x i16 > %a ) {
22
- ; CHECK-SD-LABEL: test_sshll_v4i16:
23
- ; CHECK-SD: // %bb.0:
24
- ; CHECK-SD-NEXT: sshll v0.4s, v0.4h, #9
25
- ; CHECK-SD-NEXT: ret
26
- ;
27
- ; CHECK-GI-LABEL: test_sshll_v4i16:
28
- ; CHECK-GI: // %bb.0:
29
- ; CHECK-GI-NEXT: sshll v0.4s, v0.4h, #0
30
- ; CHECK-GI-NEXT: shl v0.4s, v0.4s, #9
31
- ; CHECK-GI-NEXT: ret
16
+ ; CHECK-LABEL: test_sshll_v4i16:
17
+ ; CHECK: // %bb.0:
18
+ ; CHECK-NEXT: sshll v0.4s, v0.4h, #9
19
+ ; CHECK-NEXT: ret
32
20
%1 = sext <4 x i16 > %a to <4 x i32 >
33
21
%tmp = shl <4 x i32 > %1 , <i32 9 , i32 9 , i32 9 , i32 9 >
34
22
ret <4 x i32 > %tmp
35
23
}
36
24
37
25
define <2 x i64 > @test_sshll_v2i32 (<2 x i32 > %a ) {
38
- ; CHECK-SD-LABEL: test_sshll_v2i32:
39
- ; CHECK-SD: // %bb.0:
40
- ; CHECK-SD-NEXT: sshll v0.2d, v0.2s, #19
41
- ; CHECK-SD-NEXT: ret
42
- ;
43
- ; CHECK-GI-LABEL: test_sshll_v2i32:
44
- ; CHECK-GI: // %bb.0:
45
- ; CHECK-GI-NEXT: sshll v0.2d, v0.2s, #0
46
- ; CHECK-GI-NEXT: shl v0.2d, v0.2d, #19
47
- ; CHECK-GI-NEXT: ret
26
+ ; CHECK-LABEL: test_sshll_v2i32:
27
+ ; CHECK: // %bb.0:
28
+ ; CHECK-NEXT: sshll v0.2d, v0.2s, #19
29
+ ; CHECK-NEXT: ret
48
30
%1 = sext <2 x i32 > %a to <2 x i64 >
49
31
%tmp = shl <2 x i64 > %1 , <i64 19 , i64 19 >
50
32
ret <2 x i64 > %tmp
51
33
}
52
34
53
35
define <8 x i16 > @test_ushll_v8i8 (<8 x i8 > %a ) {
54
- ; CHECK-SD-LABEL: test_ushll_v8i8:
55
- ; CHECK-SD: // %bb.0:
56
- ; CHECK-SD-NEXT: ushll v0.8h, v0.8b, #3
57
- ; CHECK-SD-NEXT: ret
58
- ;
59
- ; CHECK-GI-LABEL: test_ushll_v8i8:
60
- ; CHECK-GI: // %bb.0:
61
- ; CHECK-GI-NEXT: ushll v0.8h, v0.8b, #0
62
- ; CHECK-GI-NEXT: shl v0.8h, v0.8h, #3
63
- ; CHECK-GI-NEXT: ret
36
+ ; CHECK-LABEL: test_ushll_v8i8:
37
+ ; CHECK: // %bb.0:
38
+ ; CHECK-NEXT: ushll v0.8h, v0.8b, #3
39
+ ; CHECK-NEXT: ret
64
40
%1 = zext <8 x i8 > %a to <8 x i16 >
65
41
%tmp = shl <8 x i16 > %1 , <i16 3 , i16 3 , i16 3 , i16 3 , i16 3 , i16 3 , i16 3 , i16 3 >
66
42
ret <8 x i16 > %tmp
67
43
}
68
44
69
45
define <4 x i32 > @test_ushll_v4i16 (<4 x i16 > %a ) {
70
- ; CHECK-SD-LABEL: test_ushll_v4i16:
71
- ; CHECK-SD: // %bb.0:
72
- ; CHECK-SD-NEXT: ushll v0.4s, v0.4h, #9
73
- ; CHECK-SD-NEXT: ret
74
- ;
75
- ; CHECK-GI-LABEL: test_ushll_v4i16:
76
- ; CHECK-GI: // %bb.0:
77
- ; CHECK-GI-NEXT: ushll v0.4s, v0.4h, #0
78
- ; CHECK-GI-NEXT: shl v0.4s, v0.4s, #9
79
- ; CHECK-GI-NEXT: ret
46
+ ; CHECK-LABEL: test_ushll_v4i16:
47
+ ; CHECK: // %bb.0:
48
+ ; CHECK-NEXT: ushll v0.4s, v0.4h, #9
49
+ ; CHECK-NEXT: ret
80
50
%1 = zext <4 x i16 > %a to <4 x i32 >
81
51
%tmp = shl <4 x i32 > %1 , <i32 9 , i32 9 , i32 9 , i32 9 >
82
52
ret <4 x i32 > %tmp
83
53
}
84
54
85
55
define <2 x i64 > @test_ushll_v2i32 (<2 x i32 > %a ) {
86
- ; CHECK-SD-LABEL: test_ushll_v2i32:
87
- ; CHECK-SD: // %bb.0:
88
- ; CHECK-SD-NEXT: ushll v0.2d, v0.2s, #19
89
- ; CHECK-SD-NEXT: ret
90
- ;
91
- ; CHECK-GI-LABEL: test_ushll_v2i32:
92
- ; CHECK-GI: // %bb.0:
93
- ; CHECK-GI-NEXT: ushll v0.2d, v0.2s, #0
94
- ; CHECK-GI-NEXT: shl v0.2d, v0.2d, #19
95
- ; CHECK-GI-NEXT: ret
56
+ ; CHECK-LABEL: test_ushll_v2i32:
57
+ ; CHECK: // %bb.0:
58
+ ; CHECK-NEXT: ushll v0.2d, v0.2s, #19
59
+ ; CHECK-NEXT: ret
96
60
%1 = zext <2 x i32 > %a to <2 x i64 >
97
61
%tmp = shl <2 x i64 > %1 , <i64 19 , i64 19 >
98
62
ret <2 x i64 > %tmp
@@ -106,8 +70,8 @@ define <8 x i16> @test_sshll2_v16i8(<16 x i8> %a) {
106
70
;
107
71
; CHECK-GI-LABEL: test_sshll2_v16i8:
108
72
; CHECK-GI: // %bb.0:
109
- ; CHECK-GI-NEXT: sshll2 v0.8h , v0.16b, #0
110
- ; CHECK-GI-NEXT: shl v0.8h, v0.8h , #3
73
+ ; CHECK-GI-NEXT: mov d0 , v0.d[1]
74
+ ; CHECK-GI-NEXT: sshll v0.8h, v0.8b , #3
111
75
; CHECK-GI-NEXT: ret
112
76
%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 >
113
77
%2 = sext <8 x i8 > %1 to <8 x i16 >
@@ -123,8 +87,8 @@ define <4 x i32> @test_sshll2_v8i16(<8 x i16> %a) {
123
87
;
124
88
; CHECK-GI-LABEL: test_sshll2_v8i16:
125
89
; CHECK-GI: // %bb.0:
126
- ; CHECK-GI-NEXT: sshll2 v0.4s , v0.8h, #0
127
- ; CHECK-GI-NEXT: shl v0.4s, v0.4s , #9
90
+ ; CHECK-GI-NEXT: mov d0 , v0.d[1]
91
+ ; CHECK-GI-NEXT: sshll v0.4s, v0.4h , #9
128
92
; CHECK-GI-NEXT: ret
129
93
%1 = shufflevector <8 x i16 > %a , <8 x i16 > undef , <4 x i32 > <i32 4 , i32 5 , i32 6 , i32 7 >
130
94
%2 = sext <4 x i16 > %1 to <4 x i32 >
@@ -140,8 +104,8 @@ define <2 x i64> @test_sshll2_v4i32(<4 x i32> %a) {
140
104
;
141
105
; CHECK-GI-LABEL: test_sshll2_v4i32:
142
106
; CHECK-GI: // %bb.0:
143
- ; CHECK-GI-NEXT: sshll2 v0.2d , v0.4s, #0
144
- ; CHECK-GI-NEXT: shl v0.2d, v0.2d , #19
107
+ ; CHECK-GI-NEXT: mov d0 , v0.d[1]
108
+ ; CHECK-GI-NEXT: sshll v0.2d, v0.2s , #19
145
109
; CHECK-GI-NEXT: ret
146
110
%1 = shufflevector <4 x i32 > %a , <4 x i32 > undef , <2 x i32 > <i32 2 , i32 3 >
147
111
%2 = sext <2 x i32 > %1 to <2 x i64 >
@@ -157,8 +121,8 @@ define <8 x i16> @test_ushll2_v16i8(<16 x i8> %a) {
157
121
;
158
122
; CHECK-GI-LABEL: test_ushll2_v16i8:
159
123
; CHECK-GI: // %bb.0:
160
- ; CHECK-GI-NEXT: ushll2 v0.8h , v0.16b, #0
161
- ; CHECK-GI-NEXT: shl v0.8h, v0.8h , #3
124
+ ; CHECK-GI-NEXT: mov d0 , v0.d[1]
125
+ ; CHECK-GI-NEXT: ushll v0.8h, v0.8b , #3
162
126
; CHECK-GI-NEXT: ret
163
127
%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 >
164
128
%2 = zext <8 x i8 > %1 to <8 x i16 >
@@ -174,8 +138,8 @@ define <4 x i32> @test_ushll2_v8i16(<8 x i16> %a) {
174
138
;
175
139
; CHECK-GI-LABEL: test_ushll2_v8i16:
176
140
; CHECK-GI: // %bb.0:
177
- ; CHECK-GI-NEXT: ushll2 v0.4s , v0.8h, #0
178
- ; CHECK-GI-NEXT: shl v0.4s, v0.4s , #9
141
+ ; CHECK-GI-NEXT: mov d0 , v0.d[1]
142
+ ; CHECK-GI-NEXT: ushll v0.4s, v0.4h , #9
179
143
; CHECK-GI-NEXT: ret
180
144
%1 = shufflevector <8 x i16 > %a , <8 x i16 > undef , <4 x i32 > <i32 4 , i32 5 , i32 6 , i32 7 >
181
145
%2 = zext <4 x i16 > %1 to <4 x i32 >
@@ -191,8 +155,8 @@ define <2 x i64> @test_ushll2_v4i32(<4 x i32> %a) {
191
155
;
192
156
; CHECK-GI-LABEL: test_ushll2_v4i32:
193
157
; CHECK-GI: // %bb.0:
194
- ; CHECK-GI-NEXT: ushll2 v0.2d , v0.4s, #0
195
- ; CHECK-GI-NEXT: shl v0.2d, v0.2d , #19
158
+ ; CHECK-GI-NEXT: mov d0 , v0.d[1]
159
+ ; CHECK-GI-NEXT: ushll v0.2d, v0.2s , #19
196
160
; CHECK-GI-NEXT: ret
197
161
%1 = shufflevector <4 x i32 > %a , <4 x i32 > undef , <2 x i32 > <i32 2 , i32 3 >
198
162
%2 = zext <2 x i32 > %1 to <2 x i64 >
0 commit comments