|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
2 | 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 |
| 3 | +; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon -global-isel -global-isel-abort=2 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI |
| 4 | + |
| 5 | +; CHECK-GI: warning: Instruction selection used fallback path for test_vuzp1q_p0 |
| 6 | +; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vuzp2q_p0 |
| 7 | +; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vzip1q_p0 |
| 8 | +; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vzip2q_p0 |
| 9 | +; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vtrn1q_p0 |
| 10 | +; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vtrn2q_p0 |
4 | 11 |
|
5 | 12 | %struct.int8x8x2_t = type { [2 x <8 x i8>] } |
6 | 13 | %struct.int16x4x2_t = type { [2 x <4 x i16>] } |
@@ -161,6 +168,16 @@ entry: |
161 | 168 | ret <2 x i64> %shuffle.i |
162 | 169 | } |
163 | 170 |
|
| 171 | +define <2 x ptr> @test_vuzp1q_p0(<2 x ptr> %a, <2 x ptr> %b) { |
| 172 | +; CHECK-LABEL: test_vuzp1q_p0: |
| 173 | +; CHECK: // %bb.0: // %entry |
| 174 | +; CHECK-NEXT: zip1 v0.2d, v0.2d, v1.2d |
| 175 | +; CHECK-NEXT: ret |
| 176 | +entry: |
| 177 | + %shuffle.i = shufflevector <2 x ptr> %a, <2 x ptr> %b, <2 x i32> <i32 0, i32 2> |
| 178 | + ret <2 x ptr> %shuffle.i |
| 179 | +} |
| 180 | + |
164 | 181 | define <2 x float> @test_vuzp1_f32(<2 x float> %a, <2 x float> %b) { |
165 | 182 | ; CHECK-LABEL: test_vuzp1_f32: |
166 | 183 | ; CHECK: // %bb.0: // %entry |
@@ -371,6 +388,16 @@ entry: |
371 | 388 | ret <2 x i64> %shuffle.i |
372 | 389 | } |
373 | 390 |
|
| 391 | +define <2 x ptr> @test_vuzp2q_p0(<2 x ptr> %a, <2 x ptr> %b) { |
| 392 | +; CHECK-LABEL: test_vuzp2q_p0: |
| 393 | +; CHECK: // %bb.0: // %entry |
| 394 | +; CHECK-NEXT: zip2 v0.2d, v0.2d, v1.2d |
| 395 | +; CHECK-NEXT: ret |
| 396 | +entry: |
| 397 | + %shuffle.i = shufflevector <2 x ptr> %a, <2 x ptr> %b, <2 x i32> <i32 1, i32 3> |
| 398 | + ret <2 x ptr> %shuffle.i |
| 399 | +} |
| 400 | + |
374 | 401 | define <2 x float> @test_vuzp2_f32(<2 x float> %a, <2 x float> %b) { |
375 | 402 | ; CHECK-LABEL: test_vuzp2_f32: |
376 | 403 | ; CHECK: // %bb.0: // %entry |
@@ -581,6 +608,16 @@ entry: |
581 | 608 | ret <2 x i64> %shuffle.i |
582 | 609 | } |
583 | 610 |
|
| 611 | +define <2 x ptr> @test_vzip1q_p0(<2 x ptr> %a, <2 x ptr> %b) { |
| 612 | +; CHECK-LABEL: test_vzip1q_p0: |
| 613 | +; CHECK: // %bb.0: // %entry |
| 614 | +; CHECK-NEXT: zip1 v0.2d, v0.2d, v1.2d |
| 615 | +; CHECK-NEXT: ret |
| 616 | +entry: |
| 617 | + %shuffle.i = shufflevector <2 x ptr> %a, <2 x ptr> %b, <2 x i32> <i32 0, i32 2> |
| 618 | + ret <2 x ptr> %shuffle.i |
| 619 | +} |
| 620 | + |
584 | 621 | define <2 x float> @test_vzip1_f32(<2 x float> %a, <2 x float> %b) { |
585 | 622 | ; CHECK-LABEL: test_vzip1_f32: |
586 | 623 | ; CHECK: // %bb.0: // %entry |
@@ -791,6 +828,16 @@ entry: |
791 | 828 | ret <2 x i64> %shuffle.i |
792 | 829 | } |
793 | 830 |
|
| 831 | +define <2 x ptr> @test_vzip2q_p0(<2 x ptr> %a, <2 x ptr> %b) { |
| 832 | +; CHECK-LABEL: test_vzip2q_p0: |
| 833 | +; CHECK: // %bb.0: // %entry |
| 834 | +; CHECK-NEXT: zip2 v0.2d, v0.2d, v1.2d |
| 835 | +; CHECK-NEXT: ret |
| 836 | +entry: |
| 837 | + %shuffle.i = shufflevector <2 x ptr> %a, <2 x ptr> %b, <2 x i32> <i32 1, i32 3> |
| 838 | + ret <2 x ptr> %shuffle.i |
| 839 | +} |
| 840 | + |
794 | 841 | define <2 x float> @test_vzip2_f32(<2 x float> %a, <2 x float> %b) { |
795 | 842 | ; CHECK-LABEL: test_vzip2_f32: |
796 | 843 | ; CHECK: // %bb.0: // %entry |
@@ -1001,6 +1048,16 @@ entry: |
1001 | 1048 | ret <2 x i64> %shuffle.i |
1002 | 1049 | } |
1003 | 1050 |
|
| 1051 | +define <2 x ptr> @test_vtrn1q_p0(<2 x ptr> %a, <2 x ptr> %b) { |
| 1052 | +; CHECK-LABEL: test_vtrn1q_p0: |
| 1053 | +; CHECK: // %bb.0: // %entry |
| 1054 | +; CHECK-NEXT: zip1 v0.2d, v0.2d, v1.2d |
| 1055 | +; CHECK-NEXT: ret |
| 1056 | +entry: |
| 1057 | + %shuffle.i = shufflevector <2 x ptr> %a, <2 x ptr> %b, <2 x i32> <i32 0, i32 2> |
| 1058 | + ret <2 x ptr> %shuffle.i |
| 1059 | +} |
| 1060 | + |
1004 | 1061 | define <2 x float> @test_vtrn1_f32(<2 x float> %a, <2 x float> %b) { |
1005 | 1062 | ; CHECK-LABEL: test_vtrn1_f32: |
1006 | 1063 | ; CHECK: // %bb.0: // %entry |
@@ -1211,6 +1268,16 @@ entry: |
1211 | 1268 | ret <2 x i64> %shuffle.i |
1212 | 1269 | } |
1213 | 1270 |
|
| 1271 | +define <2 x ptr> @test_vtrn2q_p0(<2 x ptr> %a, <2 x ptr> %b) { |
| 1272 | +; CHECK-LABEL: test_vtrn2q_p0: |
| 1273 | +; CHECK: // %bb.0: // %entry |
| 1274 | +; CHECK-NEXT: zip2 v0.2d, v0.2d, v1.2d |
| 1275 | +; CHECK-NEXT: ret |
| 1276 | +entry: |
| 1277 | + %shuffle.i = shufflevector <2 x ptr> %a, <2 x ptr> %b, <2 x i32> <i32 1, i32 3> |
| 1278 | + ret <2 x ptr> %shuffle.i |
| 1279 | +} |
| 1280 | + |
1214 | 1281 | define <2 x float> @test_vtrn2_f32(<2 x float> %a, <2 x float> %b) { |
1215 | 1282 | ; CHECK-LABEL: test_vtrn2_f32: |
1216 | 1283 | ; CHECK: // %bb.0: // %entry |
|
0 commit comments