|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 | 2 | ; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi -mattr=+rdm | FileCheck %s --check-prefixes=CHECK,CHECK-SD
|
3 | 3 | ; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi -mattr=+v8.1a | FileCheck %s --check-prefixes=CHECK,CHECK-SD
|
4 |
| -; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi -mattr=+rdm -global-isel -global-isel-abort=2 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI |
5 |
| - |
6 |
| -; CHECK-GI: warning: Instruction selection used fallback path for test_sqrdmlah_extracted_lane_s32 |
7 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrdmlahq_extracted_lane_s32 |
8 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrdmlsh_extracted_lane_s32 |
9 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrdmlshq_extracted_lane_s32 |
10 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrdmlah_i32 |
11 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrdmlsh_i32 |
12 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrdmlah_extract_i32 |
13 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrdmlsh_extract_i32 |
14 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vqrdmlahs_s32 |
15 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vqrdmlahs_lane_s32 |
16 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vqrdmlahs_laneq_s32 |
17 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vqrdmlshs_s32 |
18 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vqrdmlshs_lane_s32 |
19 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vqrdmlshs_laneq_s32 |
| 4 | +; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi -mattr=+rdm -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-GI |
20 | 5 |
|
21 | 6 | declare <4 x i16> @llvm.aarch64.neon.sqrdmulh.v4i16(<4 x i16>, <4 x i16>)
|
22 | 7 | declare <8 x i16> @llvm.aarch64.neon.sqrdmulh.v8i16(<8 x i16>, <8 x i16>)
|
@@ -719,14 +704,24 @@ entry:
|
719 | 704 | }
|
720 | 705 |
|
721 | 706 | define i32 @test_vqrdmlahs_lane_s32(i32 %a, i32 %b, <2 x i32> %c) {
|
722 |
| -; CHECK-LABEL: test_vqrdmlahs_lane_s32: |
723 |
| -; CHECK: // %bb.0: // %entry |
724 |
| -; CHECK-NEXT: fmov s1, w0 |
725 |
| -; CHECK-NEXT: fmov s2, w1 |
726 |
| -; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 |
727 |
| -; CHECK-NEXT: sqrdmlah s1, s2, v0.s[1] |
728 |
| -; CHECK-NEXT: fmov w0, s1 |
729 |
| -; CHECK-NEXT: ret |
| 707 | +; CHECK-SD-LABEL: test_vqrdmlahs_lane_s32: |
| 708 | +; CHECK-SD: // %bb.0: // %entry |
| 709 | +; CHECK-SD-NEXT: fmov s1, w0 |
| 710 | +; CHECK-SD-NEXT: fmov s2, w1 |
| 711 | +; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0 |
| 712 | +; CHECK-SD-NEXT: sqrdmlah s1, s2, v0.s[1] |
| 713 | +; CHECK-SD-NEXT: fmov w0, s1 |
| 714 | +; CHECK-SD-NEXT: ret |
| 715 | +; |
| 716 | +; CHECK-GI-LABEL: test_vqrdmlahs_lane_s32: |
| 717 | +; CHECK-GI: // %bb.0: // %entry |
| 718 | +; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0 |
| 719 | +; CHECK-GI-NEXT: fmov s1, w0 |
| 720 | +; CHECK-GI-NEXT: fmov s2, w1 |
| 721 | +; CHECK-GI-NEXT: mov s0, v0.s[1] |
| 722 | +; CHECK-GI-NEXT: sqrdmlah s1, s2, s0 |
| 723 | +; CHECK-GI-NEXT: fmov w0, s1 |
| 724 | +; CHECK-GI-NEXT: ret |
730 | 725 | entry:
|
731 | 726 | %vget_lane = extractelement <2 x i32> %c, i64 1
|
732 | 727 | %vqrdmlahs_s32.i = tail call i32 @llvm.aarch64.neon.sqrdmlah.i32(i32 %a, i32 %b, i32 %vget_lane) #4
|
@@ -889,14 +884,24 @@ entry:
|
889 | 884 | }
|
890 | 885 |
|
891 | 886 | define i32 @test_vqrdmlshs_lane_s32(i32 %a, i32 %b, <2 x i32> %c) {
|
892 |
| -; CHECK-LABEL: test_vqrdmlshs_lane_s32: |
893 |
| -; CHECK: // %bb.0: // %entry |
894 |
| -; CHECK-NEXT: fmov s1, w0 |
895 |
| -; CHECK-NEXT: fmov s2, w1 |
896 |
| -; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 |
897 |
| -; CHECK-NEXT: sqrdmlsh s1, s2, v0.s[1] |
898 |
| -; CHECK-NEXT: fmov w0, s1 |
899 |
| -; CHECK-NEXT: ret |
| 887 | +; CHECK-SD-LABEL: test_vqrdmlshs_lane_s32: |
| 888 | +; CHECK-SD: // %bb.0: // %entry |
| 889 | +; CHECK-SD-NEXT: fmov s1, w0 |
| 890 | +; CHECK-SD-NEXT: fmov s2, w1 |
| 891 | +; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0 |
| 892 | +; CHECK-SD-NEXT: sqrdmlsh s1, s2, v0.s[1] |
| 893 | +; CHECK-SD-NEXT: fmov w0, s1 |
| 894 | +; CHECK-SD-NEXT: ret |
| 895 | +; |
| 896 | +; CHECK-GI-LABEL: test_vqrdmlshs_lane_s32: |
| 897 | +; CHECK-GI: // %bb.0: // %entry |
| 898 | +; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0 |
| 899 | +; CHECK-GI-NEXT: fmov s1, w0 |
| 900 | +; CHECK-GI-NEXT: fmov s2, w1 |
| 901 | +; CHECK-GI-NEXT: mov s0, v0.s[1] |
| 902 | +; CHECK-GI-NEXT: sqrdmlsh s1, s2, s0 |
| 903 | +; CHECK-GI-NEXT: fmov w0, s1 |
| 904 | +; CHECK-GI-NEXT: ret |
900 | 905 | entry:
|
901 | 906 | %vget_lane = extractelement <2 x i32> %c, i64 1
|
902 | 907 | %vqrdmlshs_s32.i = tail call i32 @llvm.aarch64.neon.sqrdmlsh.i32(i32 %a, i32 %b, i32 %vget_lane) #4
|
|
0 commit comments