|
1 |
| -; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s |
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 |
| 2 | +; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s --check-prefixes=CHECK,CHECK-SD |
| 3 | +; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-GI |
2 | 4 |
|
3 | 5 | define <8 x i16> @test_sshll_v8i8(<8 x i8> %a) {
|
4 |
| -; CHECK: test_sshll_v8i8: |
5 |
| -; CHECK: sshll {{v[0-9]+}}.8h, {{v[0-9]+}}.8b, #3 |
| 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 | 16 | %1 = sext <8 x i8> %a to <8 x i16>
|
7 | 17 | %tmp = shl <8 x i16> %1, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
|
8 | 18 | ret <8 x i16> %tmp
|
9 | 19 | }
|
10 | 20 |
|
11 | 21 | define <4 x i32> @test_sshll_v4i16(<4 x i16> %a) {
|
12 |
| -; CHECK: test_sshll_v4i16: |
13 |
| -; CHECK: sshll {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, #9 |
| 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 |
14 | 32 | %1 = sext <4 x i16> %a to <4 x i32>
|
15 | 33 | %tmp = shl <4 x i32> %1, <i32 9, i32 9, i32 9, i32 9>
|
16 | 34 | ret <4 x i32> %tmp
|
17 | 35 | }
|
18 | 36 |
|
19 | 37 | define <2 x i64> @test_sshll_v2i32(<2 x i32> %a) {
|
20 |
| -; CHECK: test_sshll_v2i32: |
21 |
| -; CHECK: sshll {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, #19 |
| 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 |
22 | 48 | %1 = sext <2 x i32> %a to <2 x i64>
|
23 | 49 | %tmp = shl <2 x i64> %1, <i64 19, i64 19>
|
24 | 50 | ret <2 x i64> %tmp
|
25 | 51 | }
|
26 | 52 |
|
27 | 53 | define <8 x i16> @test_ushll_v8i8(<8 x i8> %a) {
|
28 |
| -; CHECK: test_ushll_v8i8: |
29 |
| -; CHECK: ushll {{v[0-9]+}}.8h, {{v[0-9]+}}.8b, #3 |
| 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 |
30 | 64 | %1 = zext <8 x i8> %a to <8 x i16>
|
31 | 65 | %tmp = shl <8 x i16> %1, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
|
32 | 66 | ret <8 x i16> %tmp
|
33 | 67 | }
|
34 | 68 |
|
35 | 69 | define <4 x i32> @test_ushll_v4i16(<4 x i16> %a) {
|
36 |
| -; CHECK: test_ushll_v4i16: |
37 |
| -; CHECK: ushll {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, #9 |
| 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 |
38 | 80 | %1 = zext <4 x i16> %a to <4 x i32>
|
39 | 81 | %tmp = shl <4 x i32> %1, <i32 9, i32 9, i32 9, i32 9>
|
40 | 82 | ret <4 x i32> %tmp
|
41 | 83 | }
|
42 | 84 |
|
43 | 85 | define <2 x i64> @test_ushll_v2i32(<2 x i32> %a) {
|
44 |
| -; CHECK: test_ushll_v2i32: |
45 |
| -; CHECK: ushll {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, #19 |
| 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 |
46 | 96 | %1 = zext <2 x i32> %a to <2 x i64>
|
47 | 97 | %tmp = shl <2 x i64> %1, <i64 19, i64 19>
|
48 | 98 | ret <2 x i64> %tmp
|
49 | 99 | }
|
50 | 100 |
|
51 | 101 | define <8 x i16> @test_sshll2_v16i8(<16 x i8> %a) {
|
52 |
| -; CHECK: test_sshll2_v16i8: |
53 |
| -; CHECK: sshll2 {{v[0-9]+}}.8h, {{v[0-9]+}}.16b, #3 |
| 102 | +; CHECK-SD-LABEL: test_sshll2_v16i8: |
| 103 | +; CHECK-SD: // %bb.0: |
| 104 | +; CHECK-SD-NEXT: sshll2 v0.8h, v0.16b, #3 |
| 105 | +; CHECK-SD-NEXT: ret |
| 106 | +; |
| 107 | +; CHECK-GI-LABEL: test_sshll2_v16i8: |
| 108 | +; CHECK-GI: // %bb.0: |
| 109 | +; CHECK-GI-NEXT: sshll2 v0.8h, v0.16b, #0 |
| 110 | +; CHECK-GI-NEXT: shl v0.8h, v0.8h, #3 |
| 111 | +; CHECK-GI-NEXT: ret |
54 | 112 | %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>
|
55 | 113 | %2 = sext <8 x i8> %1 to <8 x i16>
|
56 | 114 | %tmp = shl <8 x i16> %2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
|
57 | 115 | ret <8 x i16> %tmp
|
58 | 116 | }
|
59 | 117 |
|
60 | 118 | define <4 x i32> @test_sshll2_v8i16(<8 x i16> %a) {
|
61 |
| -; CHECK: test_sshll2_v8i16: |
62 |
| -; CHECK: sshll2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, #9 |
| 119 | +; CHECK-SD-LABEL: test_sshll2_v8i16: |
| 120 | +; CHECK-SD: // %bb.0: |
| 121 | +; CHECK-SD-NEXT: sshll2 v0.4s, v0.8h, #9 |
| 122 | +; CHECK-SD-NEXT: ret |
| 123 | +; |
| 124 | +; CHECK-GI-LABEL: test_sshll2_v8i16: |
| 125 | +; CHECK-GI: // %bb.0: |
| 126 | +; CHECK-GI-NEXT: sshll2 v0.4s, v0.8h, #0 |
| 127 | +; CHECK-GI-NEXT: shl v0.4s, v0.4s, #9 |
| 128 | +; CHECK-GI-NEXT: ret |
63 | 129 | %1 = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
|
64 | 130 | %2 = sext <4 x i16> %1 to <4 x i32>
|
65 | 131 | %tmp = shl <4 x i32> %2, <i32 9, i32 9, i32 9, i32 9>
|
66 | 132 | ret <4 x i32> %tmp
|
67 | 133 | }
|
68 | 134 |
|
69 | 135 | define <2 x i64> @test_sshll2_v4i32(<4 x i32> %a) {
|
70 |
| -; CHECK: test_sshll2_v4i32: |
71 |
| -; CHECK: sshll2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, #19 |
| 136 | +; CHECK-SD-LABEL: test_sshll2_v4i32: |
| 137 | +; CHECK-SD: // %bb.0: |
| 138 | +; CHECK-SD-NEXT: sshll2 v0.2d, v0.4s, #19 |
| 139 | +; CHECK-SD-NEXT: ret |
| 140 | +; |
| 141 | +; CHECK-GI-LABEL: test_sshll2_v4i32: |
| 142 | +; CHECK-GI: // %bb.0: |
| 143 | +; CHECK-GI-NEXT: sshll2 v0.2d, v0.4s, #0 |
| 144 | +; CHECK-GI-NEXT: shl v0.2d, v0.2d, #19 |
| 145 | +; CHECK-GI-NEXT: ret |
72 | 146 | %1 = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
|
73 | 147 | %2 = sext <2 x i32> %1 to <2 x i64>
|
74 | 148 | %tmp = shl <2 x i64> %2, <i64 19, i64 19>
|
75 | 149 | ret <2 x i64> %tmp
|
76 | 150 | }
|
77 | 151 |
|
78 | 152 | define <8 x i16> @test_ushll2_v16i8(<16 x i8> %a) {
|
79 |
| -; CHECK: test_ushll2_v16i8: |
80 |
| -; CHECK: ushll2 {{v[0-9]+}}.8h, {{v[0-9]+}}.16b, #3 |
| 153 | +; CHECK-SD-LABEL: test_ushll2_v16i8: |
| 154 | +; CHECK-SD: // %bb.0: |
| 155 | +; CHECK-SD-NEXT: ushll2 v0.8h, v0.16b, #3 |
| 156 | +; CHECK-SD-NEXT: ret |
| 157 | +; |
| 158 | +; CHECK-GI-LABEL: test_ushll2_v16i8: |
| 159 | +; CHECK-GI: // %bb.0: |
| 160 | +; CHECK-GI-NEXT: ushll2 v0.8h, v0.16b, #0 |
| 161 | +; CHECK-GI-NEXT: shl v0.8h, v0.8h, #3 |
| 162 | +; CHECK-GI-NEXT: ret |
81 | 163 | %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>
|
82 | 164 | %2 = zext <8 x i8> %1 to <8 x i16>
|
83 | 165 | %tmp = shl <8 x i16> %2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
|
84 | 166 | ret <8 x i16> %tmp
|
85 | 167 | }
|
86 | 168 |
|
87 | 169 | define <4 x i32> @test_ushll2_v8i16(<8 x i16> %a) {
|
88 |
| -; CHECK: test_ushll2_v8i16: |
89 |
| -; CHECK: ushll2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, #9 |
| 170 | +; CHECK-SD-LABEL: test_ushll2_v8i16: |
| 171 | +; CHECK-SD: // %bb.0: |
| 172 | +; CHECK-SD-NEXT: ushll2 v0.4s, v0.8h, #9 |
| 173 | +; CHECK-SD-NEXT: ret |
| 174 | +; |
| 175 | +; CHECK-GI-LABEL: test_ushll2_v8i16: |
| 176 | +; CHECK-GI: // %bb.0: |
| 177 | +; CHECK-GI-NEXT: ushll2 v0.4s, v0.8h, #0 |
| 178 | +; CHECK-GI-NEXT: shl v0.4s, v0.4s, #9 |
| 179 | +; CHECK-GI-NEXT: ret |
90 | 180 | %1 = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
|
91 | 181 | %2 = zext <4 x i16> %1 to <4 x i32>
|
92 | 182 | %tmp = shl <4 x i32> %2, <i32 9, i32 9, i32 9, i32 9>
|
93 | 183 | ret <4 x i32> %tmp
|
94 | 184 | }
|
95 | 185 |
|
96 | 186 | define <2 x i64> @test_ushll2_v4i32(<4 x i32> %a) {
|
97 |
| -; CHECK: test_ushll2_v4i32: |
98 |
| -; CHECK: ushll2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, #19 |
| 187 | +; CHECK-SD-LABEL: test_ushll2_v4i32: |
| 188 | +; CHECK-SD: // %bb.0: |
| 189 | +; CHECK-SD-NEXT: ushll2 v0.2d, v0.4s, #19 |
| 190 | +; CHECK-SD-NEXT: ret |
| 191 | +; |
| 192 | +; CHECK-GI-LABEL: test_ushll2_v4i32: |
| 193 | +; CHECK-GI: // %bb.0: |
| 194 | +; CHECK-GI-NEXT: ushll2 v0.2d, v0.4s, #0 |
| 195 | +; CHECK-GI-NEXT: shl v0.2d, v0.2d, #19 |
| 196 | +; CHECK-GI-NEXT: ret |
99 | 197 | %1 = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
|
100 | 198 | %2 = zext <2 x i32> %1 to <2 x i64>
|
101 | 199 | %tmp = shl <2 x i64> %2, <i64 19, i64 19>
|
102 | 200 | ret <2 x i64> %tmp
|
103 | 201 | }
|
104 | 202 |
|
105 | 203 | define <8 x i16> @test_sshll_shl0_v8i8(<8 x i8> %a) {
|
106 |
| -; CHECK: test_sshll_shl0_v8i8: |
107 |
| -; CHECK: sshll {{v[0-9]+}}.8h, {{v[0-9]+}}.8b, #0 |
| 204 | +; CHECK-LABEL: test_sshll_shl0_v8i8: |
| 205 | +; CHECK: // %bb.0: |
| 206 | +; CHECK-NEXT: sshll v0.8h, v0.8b, #0 |
| 207 | +; CHECK-NEXT: ret |
108 | 208 | %tmp = sext <8 x i8> %a to <8 x i16>
|
109 | 209 | ret <8 x i16> %tmp
|
110 | 210 | }
|
111 | 211 |
|
112 | 212 | define <4 x i32> @test_sshll_shl0_v4i16(<4 x i16> %a) {
|
113 |
| -; CHECK: test_sshll_shl0_v4i16: |
114 |
| -; CHECK: sshll {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, #0 |
| 213 | +; CHECK-LABEL: test_sshll_shl0_v4i16: |
| 214 | +; CHECK: // %bb.0: |
| 215 | +; CHECK-NEXT: sshll v0.4s, v0.4h, #0 |
| 216 | +; CHECK-NEXT: ret |
115 | 217 | %tmp = sext <4 x i16> %a to <4 x i32>
|
116 | 218 | ret <4 x i32> %tmp
|
117 | 219 | }
|
118 | 220 |
|
119 | 221 | define <2 x i64> @test_sshll_shl0_v2i32(<2 x i32> %a) {
|
120 |
| -; CHECK: test_sshll_shl0_v2i32: |
121 |
| -; CHECK: sshll {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, #0 |
| 222 | +; CHECK-LABEL: test_sshll_shl0_v2i32: |
| 223 | +; CHECK: // %bb.0: |
| 224 | +; CHECK-NEXT: sshll v0.2d, v0.2s, #0 |
| 225 | +; CHECK-NEXT: ret |
122 | 226 | %tmp = sext <2 x i32> %a to <2 x i64>
|
123 | 227 | ret <2 x i64> %tmp
|
124 | 228 | }
|
125 | 229 |
|
126 | 230 | define <8 x i16> @test_ushll_shl0_v8i8(<8 x i8> %a) {
|
127 |
| -; CHECK: test_ushll_shl0_v8i8: |
128 |
| -; CHECK: ushll {{v[0-9]+}}.8h, {{v[0-9]+}}.8b, #0 |
| 231 | +; CHECK-LABEL: test_ushll_shl0_v8i8: |
| 232 | +; CHECK: // %bb.0: |
| 233 | +; CHECK-NEXT: ushll v0.8h, v0.8b, #0 |
| 234 | +; CHECK-NEXT: ret |
129 | 235 | %tmp = zext <8 x i8> %a to <8 x i16>
|
130 | 236 | ret <8 x i16> %tmp
|
131 | 237 | }
|
132 | 238 |
|
133 | 239 | define <4 x i32> @test_ushll_shl0_v4i16(<4 x i16> %a) {
|
134 |
| -; CHECK: test_ushll_shl0_v4i16: |
135 |
| -; CHECK: ushll {{v[0-9]+}}.4s, {{v[0-9]+}}.4h, #0 |
| 240 | +; CHECK-LABEL: test_ushll_shl0_v4i16: |
| 241 | +; CHECK: // %bb.0: |
| 242 | +; CHECK-NEXT: ushll v0.4s, v0.4h, #0 |
| 243 | +; CHECK-NEXT: ret |
136 | 244 | %tmp = zext <4 x i16> %a to <4 x i32>
|
137 | 245 | ret <4 x i32> %tmp
|
138 | 246 | }
|
139 | 247 |
|
140 | 248 | define <2 x i64> @test_ushll_shl0_v2i32(<2 x i32> %a) {
|
141 |
| -; CHECK: test_ushll_shl0_v2i32: |
142 |
| -; CHECK: ushll {{v[0-9]+}}.2d, {{v[0-9]+}}.2s, #0 |
| 249 | +; CHECK-LABEL: test_ushll_shl0_v2i32: |
| 250 | +; CHECK: // %bb.0: |
| 251 | +; CHECK-NEXT: ushll v0.2d, v0.2s, #0 |
| 252 | +; CHECK-NEXT: ret |
143 | 253 | %tmp = zext <2 x i32> %a to <2 x i64>
|
144 | 254 | ret <2 x i64> %tmp
|
145 | 255 | }
|
146 | 256 |
|
147 | 257 | define <8 x i16> @test_sshll2_shl0_v16i8(<16 x i8> %a) {
|
148 |
| -; CHECK: test_sshll2_shl0_v16i8: |
149 |
| -; CHECK: sshll2 {{v[0-9]+}}.8h, {{v[0-9]+}}.16b, #0 |
| 258 | +; CHECK-LABEL: test_sshll2_shl0_v16i8: |
| 259 | +; CHECK: // %bb.0: |
| 260 | +; CHECK-NEXT: sshll2 v0.8h, v0.16b, #0 |
| 261 | +; CHECK-NEXT: ret |
150 | 262 | %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>
|
151 | 263 | %tmp = sext <8 x i8> %1 to <8 x i16>
|
152 | 264 | ret <8 x i16> %tmp
|
153 | 265 | }
|
154 | 266 |
|
155 | 267 | define <4 x i32> @test_sshll2_shl0_v8i16(<8 x i16> %a) {
|
156 |
| -; CHECK: test_sshll2_shl0_v8i16: |
157 |
| -; CHECK: sshll2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, #0 |
| 268 | +; CHECK-LABEL: test_sshll2_shl0_v8i16: |
| 269 | +; CHECK: // %bb.0: |
| 270 | +; CHECK-NEXT: sshll2 v0.4s, v0.8h, #0 |
| 271 | +; CHECK-NEXT: ret |
158 | 272 | %1 = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
|
159 | 273 | %tmp = sext <4 x i16> %1 to <4 x i32>
|
160 | 274 | ret <4 x i32> %tmp
|
161 | 275 | }
|
162 | 276 |
|
163 | 277 | define <2 x i64> @test_sshll2_shl0_v4i32(<4 x i32> %a) {
|
164 |
| -; CHECK: test_sshll2_shl0_v4i32: |
165 |
| -; CHECK: sshll2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, #0 |
| 278 | +; CHECK-LABEL: test_sshll2_shl0_v4i32: |
| 279 | +; CHECK: // %bb.0: |
| 280 | +; CHECK-NEXT: sshll2 v0.2d, v0.4s, #0 |
| 281 | +; CHECK-NEXT: ret |
166 | 282 | %1 = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
|
167 | 283 | %tmp = sext <2 x i32> %1 to <2 x i64>
|
168 | 284 | ret <2 x i64> %tmp
|
169 | 285 | }
|
170 | 286 |
|
171 | 287 | define <8 x i16> @test_ushll2_shl0_v16i8(<16 x i8> %a) {
|
172 |
| -; CHECK: test_ushll2_shl0_v16i8: |
173 |
| -; CHECK: ushll2 {{v[0-9]+}}.8h, {{v[0-9]+}}.16b, #0 |
| 288 | +; CHECK-LABEL: test_ushll2_shl0_v16i8: |
| 289 | +; CHECK: // %bb.0: |
| 290 | +; CHECK-NEXT: ushll2 v0.8h, v0.16b, #0 |
| 291 | +; CHECK-NEXT: ret |
174 | 292 | %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>
|
175 | 293 | %tmp = zext <8 x i8> %1 to <8 x i16>
|
176 | 294 | ret <8 x i16> %tmp
|
177 | 295 | }
|
178 | 296 |
|
179 | 297 | define <4 x i32> @test_ushll2_shl0_v8i16(<8 x i16> %a) {
|
180 |
| -; CHECK: test_ushll2_shl0_v8i16: |
181 |
| -; CHECK: ushll2 {{v[0-9]+}}.4s, {{v[0-9]+}}.8h, #0 |
| 298 | +; CHECK-LABEL: test_ushll2_shl0_v8i16: |
| 299 | +; CHECK: // %bb.0: |
| 300 | +; CHECK-NEXT: ushll2 v0.4s, v0.8h, #0 |
| 301 | +; CHECK-NEXT: ret |
182 | 302 | %1 = shufflevector <8 x i16> %a, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
|
183 | 303 | %tmp = zext <4 x i16> %1 to <4 x i32>
|
184 | 304 | ret <4 x i32> %tmp
|
185 | 305 | }
|
186 | 306 |
|
187 | 307 | define <2 x i64> @test_ushll2_shl0_v4i32(<4 x i32> %a) {
|
188 |
| -; CHECK: test_ushll2_shl0_v4i32: |
189 |
| -; CHECK: ushll2 {{v[0-9]+}}.2d, {{v[0-9]+}}.4s, #0 |
| 308 | +; CHECK-LABEL: test_ushll2_shl0_v4i32: |
| 309 | +; CHECK: // %bb.0: |
| 310 | +; CHECK-NEXT: ushll2 v0.2d, v0.4s, #0 |
| 311 | +; CHECK-NEXT: ret |
190 | 312 | %1 = shufflevector <4 x i32> %a, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
|
191 | 313 | %tmp = zext <2 x i32> %1 to <2 x i64>
|
192 | 314 | ret <2 x i64> %tmp
|
193 | 315 | }
|
194 | 316 |
|
195 | 317 | define <8 x i16> @test_ushll_cmp(<8 x i8> %a, <8 x i8> %b) #0 {
|
196 |
| -; CHECK: test_ushll_cmp: |
197 |
| -; CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b |
198 |
| -; CHECK-NEXT: ushll {{v[0-9]+}}.8h, {{v[0-9]+}}.8b, #0 |
| 318 | +; CHECK-SD-LABEL: test_ushll_cmp: |
| 319 | +; CHECK-SD: // %bb.0: |
| 320 | +; CHECK-SD-NEXT: cmeq v0.8b, v0.8b, v1.8b |
| 321 | +; CHECK-SD-NEXT: ushll v0.8h, v0.8b, #0 |
| 322 | +; CHECK-SD-NEXT: ret |
| 323 | +; |
| 324 | +; CHECK-GI-LABEL: test_ushll_cmp: |
| 325 | +; CHECK-GI: // %bb.0: |
| 326 | +; CHECK-GI-NEXT: cmeq v0.8b, v0.8b, v1.8b |
| 327 | +; CHECK-GI-NEXT: movi v1.2d, #0xff00ff00ff00ff |
| 328 | +; CHECK-GI-NEXT: ushll v0.8h, v0.8b, #0 |
| 329 | +; CHECK-GI-NEXT: shl v0.8h, v0.8h, #15 |
| 330 | +; CHECK-GI-NEXT: sshr v0.8h, v0.8h, #15 |
| 331 | +; CHECK-GI-NEXT: and v0.16b, v0.16b, v1.16b |
| 332 | +; CHECK-GI-NEXT: ret |
199 | 333 | %cmp.i = icmp eq <8 x i8> %a, %b
|
200 | 334 | %vcgtz.i.i = sext <8 x i1> %cmp.i to <8 x i8>
|
201 | 335 | %vmovl.i.i.i = zext <8 x i8> %vcgtz.i.i to <8 x i16>
|
|
0 commit comments