[llvm] e1276ec - [AArch64][GlobalISel] Add test coverage for arm64-neon-v8.1a.ll. NFC
David Green via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 3 02:06:19 PDT 2025
Author: David Green
Date: 2025-06-03T10:06:14+01:00
New Revision: e1276ece7080e284dba6acf45d0702f614fa72f5
URL: https://github.com/llvm/llvm-project/commit/e1276ece7080e284dba6acf45d0702f614fa72f5
DIFF: https://github.com/llvm/llvm-project/commit/e1276ece7080e284dba6acf45d0702f614fa72f5.diff
LOG: [AArch64][GlobalISel] Add test coverage for arm64-neon-v8.1a.ll. NFC
Added:
Modified:
llvm/test/CodeGen/AArch64/arm64-neon-v8.1a.ll
Removed:
################################################################################
diff --git a/llvm/test/CodeGen/AArch64/arm64-neon-v8.1a.ll b/llvm/test/CodeGen/AArch64/arm64-neon-v8.1a.ll
index 3d52a2c044a0c..32f5798040f20 100644
--- a/llvm/test/CodeGen/AArch64/arm64-neon-v8.1a.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-neon-v8.1a.ll
@@ -1,6 +1,22 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi -mattr=+rdm | FileCheck %s
-; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi -mattr=+v8.1a | FileCheck %s
+; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi -mattr=+rdm | FileCheck %s --check-prefixes=CHECK,CHECK-SD
+; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-eabi -mattr=+v8.1a | FileCheck %s --check-prefixes=CHECK,CHECK-SD
+; 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
+
+; CHECK-GI: warning: Instruction selection used fallback path for test_sqrdmlah_extracted_lane_s32
+; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrdmlahq_extracted_lane_s32
+; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrdmlsh_extracted_lane_s32
+; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrdmlshq_extracted_lane_s32
+; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrdmlah_i32
+; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrdmlsh_i32
+; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrdmlah_extract_i32
+; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrdmlsh_extract_i32
+; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vqrdmlahs_s32
+; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vqrdmlahs_lane_s32
+; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vqrdmlahs_laneq_s32
+; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vqrdmlshs_s32
+; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vqrdmlshs_lane_s32
+; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vqrdmlshs_laneq_s32
declare <4 x i16> @llvm.aarch64.neon.sqrdmulh.v4i16(<4 x i16>, <4 x i16>)
declare <8 x i16> @llvm.aarch64.neon.sqrdmulh.v8i16(<8 x i16>, <8 x i16>)
@@ -404,15 +420,25 @@ define i16 @test_sqrdmlah_v1i16(i16 %acc, i16 %x, i16 %y) {
}
define i32 @test_sqrdmlah_v1i32(i32 %acc, i32 %x, i32 %y) {
-; CHECK-LABEL: test_sqrdmlah_v1i32:
-; CHECK: // %bb.0:
-; CHECK-NEXT: fmov s0, w1
-; CHECK-NEXT: fmov s1, w2
-; CHECK-NEXT: sqrdmulh v0.4s, v0.4s, v1.4s
-; CHECK-NEXT: fmov s1, w0
-; CHECK-NEXT: sqadd v0.4s, v1.4s, v0.4s
-; CHECK-NEXT: fmov w0, s0
-; CHECK-NEXT: ret
+; CHECK-SD-LABEL: test_sqrdmlah_v1i32:
+; CHECK-SD: // %bb.0:
+; CHECK-SD-NEXT: fmov s0, w1
+; CHECK-SD-NEXT: fmov s1, w2
+; CHECK-SD-NEXT: sqrdmulh v0.4s, v0.4s, v1.4s
+; CHECK-SD-NEXT: fmov s1, w0
+; CHECK-SD-NEXT: sqadd v0.4s, v1.4s, v0.4s
+; CHECK-SD-NEXT: fmov w0, s0
+; CHECK-SD-NEXT: ret
+;
+; CHECK-GI-LABEL: test_sqrdmlah_v1i32:
+; CHECK-GI: // %bb.0:
+; CHECK-GI-NEXT: mov v0.s[0], w1
+; CHECK-GI-NEXT: mov v1.s[0], w2
+; CHECK-GI-NEXT: sqrdmulh v0.4s, v0.4s, v1.4s
+; CHECK-GI-NEXT: mov v1.s[0], w0
+; CHECK-GI-NEXT: sqadd v0.4s, v1.4s, v0.4s
+; CHECK-GI-NEXT: fmov w0, s0
+; CHECK-GI-NEXT: ret
%x_vec = insertelement <4 x i32> undef, i32 %x, i64 0
%y_vec = insertelement <4 x i32> undef, i32 %y, i64 0
%prod_vec = call <4 x i32> @llvm.aarch64.neon.sqrdmulh.v4i32(<4 x i32> %x_vec, <4 x i32> %y_vec)
@@ -443,15 +469,25 @@ define i16 @test_sqrdmlsh_v1i16(i16 %acc, i16 %x, i16 %y) {
}
define i32 @test_sqrdmlsh_v1i32(i32 %acc, i32 %x, i32 %y) {
-; CHECK-LABEL: test_sqrdmlsh_v1i32:
-; CHECK: // %bb.0:
-; CHECK-NEXT: fmov s0, w1
-; CHECK-NEXT: fmov s1, w2
-; CHECK-NEXT: sqrdmulh v0.4s, v0.4s, v1.4s
-; CHECK-NEXT: fmov s1, w0
-; CHECK-NEXT: sqsub v0.4s, v1.4s, v0.4s
-; CHECK-NEXT: fmov w0, s0
-; CHECK-NEXT: ret
+; CHECK-SD-LABEL: test_sqrdmlsh_v1i32:
+; CHECK-SD: // %bb.0:
+; CHECK-SD-NEXT: fmov s0, w1
+; CHECK-SD-NEXT: fmov s1, w2
+; CHECK-SD-NEXT: sqrdmulh v0.4s, v0.4s, v1.4s
+; CHECK-SD-NEXT: fmov s1, w0
+; CHECK-SD-NEXT: sqsub v0.4s, v1.4s, v0.4s
+; CHECK-SD-NEXT: fmov w0, s0
+; CHECK-SD-NEXT: ret
+;
+; CHECK-GI-LABEL: test_sqrdmlsh_v1i32:
+; CHECK-GI: // %bb.0:
+; CHECK-GI-NEXT: mov v0.s[0], w1
+; CHECK-GI-NEXT: mov v1.s[0], w2
+; CHECK-GI-NEXT: sqrdmulh v0.4s, v0.4s, v1.4s
+; CHECK-GI-NEXT: mov v1.s[0], w0
+; CHECK-GI-NEXT: sqsub v0.4s, v1.4s, v0.4s
+; CHECK-GI-NEXT: fmov w0, s0
+; CHECK-GI-NEXT: ret
%x_vec = insertelement <4 x i32> undef, i32 %x, i64 0
%y_vec = insertelement <4 x i32> undef, i32 %y, i64 0
%prod_vec = call <4 x i32> @llvm.aarch64.neon.sqrdmulh.v4i32(<4 x i32> %x_vec, <4 x i32> %y_vec)
@@ -568,10 +604,16 @@ define i32 @test_sqrdmlsh_extract_i32(i32 %acc, i32 %mhs, <4 x i32> %rhs) {
; Using sqrdmlah intrinsics
define <4 x i16> @test_vqrdmlah_laneq_s16(<4 x i16> %a, <4 x i16> %b, <8 x i16> %v) {
-; CHECK-LABEL: test_vqrdmlah_laneq_s16:
-; CHECK: // %bb.0: // %entry
-; CHECK-NEXT: sqrdmlah v0.4h, v1.4h, v2.h[7]
-; CHECK-NEXT: ret
+; CHECK-SD-LABEL: test_vqrdmlah_laneq_s16:
+; CHECK-SD: // %bb.0: // %entry
+; CHECK-SD-NEXT: sqrdmlah v0.4h, v1.4h, v2.h[7]
+; CHECK-SD-NEXT: ret
+;
+; CHECK-GI-LABEL: test_vqrdmlah_laneq_s16:
+; CHECK-GI: // %bb.0: // %entry
+; CHECK-GI-NEXT: dup v2.8h, v2.h[7]
+; CHECK-GI-NEXT: sqrdmlah v0.4h, v1.4h, v2.4h
+; CHECK-GI-NEXT: ret
entry:
%lane = shufflevector <8 x i16> %v, <8 x i16> poison, <4 x i32> <i32 7, i32 7, i32 7, i32 7>
%vqrdmlah_v3.i = tail call <4 x i16> @llvm.aarch64.neon.sqrdmlah.v4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %lane) #4
@@ -579,10 +621,16 @@ entry:
}
define <2 x i32> @test_vqrdmlah_laneq_s32(<2 x i32> %a, <2 x i32> %b, <4 x i32> %v) {
-; CHECK-LABEL: test_vqrdmlah_laneq_s32:
-; CHECK: // %bb.0: // %entry
-; CHECK-NEXT: sqrdmlah v0.2s, v1.2s, v2.s[3]
-; CHECK-NEXT: ret
+; CHECK-SD-LABEL: test_vqrdmlah_laneq_s32:
+; CHECK-SD: // %bb.0: // %entry
+; CHECK-SD-NEXT: sqrdmlah v0.2s, v1.2s, v2.s[3]
+; CHECK-SD-NEXT: ret
+;
+; CHECK-GI-LABEL: test_vqrdmlah_laneq_s32:
+; CHECK-GI: // %bb.0: // %entry
+; CHECK-GI-NEXT: dup v2.4s, v2.s[3]
+; CHECK-GI-NEXT: sqrdmlah v0.2s, v1.2s, v2.2s
+; CHECK-GI-NEXT: ret
entry:
%lane = shufflevector <4 x i32> %v, <4 x i32> poison, <2 x i32> <i32 3, i32 3>
%vqrdmlah_v3.i = tail call <2 x i32> @llvm.aarch64.neon.sqrdmlah.v2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %lane) #4
@@ -644,14 +692,23 @@ entry:
}
define i16 @test_vqrdmlahh_lane_s16(i16 %a, i16 %b, <4 x i16> %c) {
-; CHECK-LABEL: test_vqrdmlahh_lane_s16:
-; CHECK: // %bb.0: // %entry
-; CHECK-NEXT: fmov s1, w0
-; CHECK-NEXT: fmov s2, w1
-; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
-; CHECK-NEXT: sqrdmlah v1.4h, v2.4h, v0.h[3]
-; CHECK-NEXT: umov w0, v1.h[0]
-; CHECK-NEXT: ret
+; CHECK-SD-LABEL: test_vqrdmlahh_lane_s16:
+; CHECK-SD: // %bb.0: // %entry
+; CHECK-SD-NEXT: fmov s1, w0
+; CHECK-SD-NEXT: fmov s2, w1
+; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
+; CHECK-SD-NEXT: sqrdmlah v1.4h, v2.4h, v0.h[3]
+; CHECK-SD-NEXT: umov w0, v1.h[0]
+; CHECK-SD-NEXT: ret
+;
+; CHECK-GI-LABEL: test_vqrdmlahh_lane_s16:
+; CHECK-GI: // %bb.0: // %entry
+; CHECK-GI-NEXT: rev64 v0.4h, v0.4h
+; CHECK-GI-NEXT: fmov s1, w0
+; CHECK-GI-NEXT: fmov s2, w1
+; CHECK-GI-NEXT: sqrdmlah v1.4h, v2.4h, v0.4h
+; CHECK-GI-NEXT: umov w0, v1.h[0]
+; CHECK-GI-NEXT: ret
entry:
%0 = insertelement <4 x i16> undef, i16 %a, i64 0
%1 = insertelement <4 x i16> undef, i16 %b, i64 0
@@ -677,13 +734,22 @@ entry:
}
define i16 @test_vqrdmlahh_laneq_s16(i16 %a, i16 %b, <8 x i16> %c) {
-; CHECK-LABEL: test_vqrdmlahh_laneq_s16:
-; CHECK: // %bb.0: // %entry
-; CHECK-NEXT: fmov s1, w0
-; CHECK-NEXT: fmov s2, w1
-; CHECK-NEXT: sqrdmlah v1.4h, v2.4h, v0.h[7]
-; CHECK-NEXT: umov w0, v1.h[0]
-; CHECK-NEXT: ret
+; CHECK-SD-LABEL: test_vqrdmlahh_laneq_s16:
+; CHECK-SD: // %bb.0: // %entry
+; CHECK-SD-NEXT: fmov s1, w0
+; CHECK-SD-NEXT: fmov s2, w1
+; CHECK-SD-NEXT: sqrdmlah v1.4h, v2.4h, v0.h[7]
+; CHECK-SD-NEXT: umov w0, v1.h[0]
+; CHECK-SD-NEXT: ret
+;
+; CHECK-GI-LABEL: test_vqrdmlahh_laneq_s16:
+; CHECK-GI: // %bb.0: // %entry
+; CHECK-GI-NEXT: ext v0.16b, v0.16b, v0.16b, #14
+; CHECK-GI-NEXT: fmov s1, w0
+; CHECK-GI-NEXT: fmov s2, w1
+; CHECK-GI-NEXT: sqrdmlah v1.4h, v2.4h, v0.4h
+; CHECK-GI-NEXT: umov w0, v1.h[0]
+; CHECK-GI-NEXT: ret
entry:
%0 = insertelement <4 x i16> undef, i16 %a, i64 0
%1 = insertelement <4 x i16> undef, i16 %b, i64 0
@@ -708,10 +774,16 @@ entry:
}
define <4 x i16> @test_vqrdmlsh_laneq_s16(<4 x i16> %a, <4 x i16> %b, <8 x i16> %v) {
-; CHECK-LABEL: test_vqrdmlsh_laneq_s16:
-; CHECK: // %bb.0: // %entry
-; CHECK-NEXT: sqrdmlsh v0.4h, v1.4h, v2.h[7]
-; CHECK-NEXT: ret
+; CHECK-SD-LABEL: test_vqrdmlsh_laneq_s16:
+; CHECK-SD: // %bb.0: // %entry
+; CHECK-SD-NEXT: sqrdmlsh v0.4h, v1.4h, v2.h[7]
+; CHECK-SD-NEXT: ret
+;
+; CHECK-GI-LABEL: test_vqrdmlsh_laneq_s16:
+; CHECK-GI: // %bb.0: // %entry
+; CHECK-GI-NEXT: dup v2.8h, v2.h[7]
+; CHECK-GI-NEXT: sqrdmlsh v0.4h, v1.4h, v2.4h
+; CHECK-GI-NEXT: ret
entry:
%lane = shufflevector <8 x i16> %v, <8 x i16> poison, <4 x i32> <i32 7, i32 7, i32 7, i32 7>
%vqrdmlsh_v3.i = tail call <4 x i16> @llvm.aarch64.neon.sqrdmlsh.v4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %lane) #4
@@ -719,10 +791,16 @@ entry:
}
define <2 x i32> @test_vqrdmlsh_laneq_s32(<2 x i32> %a, <2 x i32> %b, <4 x i32> %v) {
-; CHECK-LABEL: test_vqrdmlsh_laneq_s32:
-; CHECK: // %bb.0: // %entry
-; CHECK-NEXT: sqrdmlsh v0.2s, v1.2s, v2.s[3]
-; CHECK-NEXT: ret
+; CHECK-SD-LABEL: test_vqrdmlsh_laneq_s32:
+; CHECK-SD: // %bb.0: // %entry
+; CHECK-SD-NEXT: sqrdmlsh v0.2s, v1.2s, v2.s[3]
+; CHECK-SD-NEXT: ret
+;
+; CHECK-GI-LABEL: test_vqrdmlsh_laneq_s32:
+; CHECK-GI: // %bb.0: // %entry
+; CHECK-GI-NEXT: dup v2.4s, v2.s[3]
+; CHECK-GI-NEXT: sqrdmlsh v0.2s, v1.2s, v2.2s
+; CHECK-GI-NEXT: ret
entry:
%lane = shufflevector <4 x i32> %v, <4 x i32> poison, <2 x i32> <i32 3, i32 3>
%vqrdmlsh_v3.i = tail call <2 x i32> @llvm.aarch64.neon.sqrdmlsh.v2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %lane) #4
@@ -784,14 +862,23 @@ entry:
}
define i16 @test_vqrdmlshh_lane_s16(i16 %a, i16 %b, <4 x i16> %c) {
-; CHECK-LABEL: test_vqrdmlshh_lane_s16:
-; CHECK: // %bb.0: // %entry
-; CHECK-NEXT: fmov s1, w0
-; CHECK-NEXT: fmov s2, w1
-; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
-; CHECK-NEXT: sqrdmlsh v1.4h, v2.4h, v0.h[3]
-; CHECK-NEXT: umov w0, v1.h[0]
-; CHECK-NEXT: ret
+; CHECK-SD-LABEL: test_vqrdmlshh_lane_s16:
+; CHECK-SD: // %bb.0: // %entry
+; CHECK-SD-NEXT: fmov s1, w0
+; CHECK-SD-NEXT: fmov s2, w1
+; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
+; CHECK-SD-NEXT: sqrdmlsh v1.4h, v2.4h, v0.h[3]
+; CHECK-SD-NEXT: umov w0, v1.h[0]
+; CHECK-SD-NEXT: ret
+;
+; CHECK-GI-LABEL: test_vqrdmlshh_lane_s16:
+; CHECK-GI: // %bb.0: // %entry
+; CHECK-GI-NEXT: rev64 v0.4h, v0.4h
+; CHECK-GI-NEXT: fmov s1, w0
+; CHECK-GI-NEXT: fmov s2, w1
+; CHECK-GI-NEXT: sqrdmlsh v1.4h, v2.4h, v0.4h
+; CHECK-GI-NEXT: umov w0, v1.h[0]
+; CHECK-GI-NEXT: ret
entry:
%0 = insertelement <4 x i16> undef, i16 %a, i64 0
%1 = insertelement <4 x i16> undef, i16 %b, i64 0
@@ -817,13 +904,22 @@ entry:
}
define i16 @test_vqrdmlshh_laneq_s16(i16 %a, i16 %b, <8 x i16> %c) {
-; CHECK-LABEL: test_vqrdmlshh_laneq_s16:
-; CHECK: // %bb.0: // %entry
-; CHECK-NEXT: fmov s1, w0
-; CHECK-NEXT: fmov s2, w1
-; CHECK-NEXT: sqrdmlsh v1.4h, v2.4h, v0.h[7]
-; CHECK-NEXT: umov w0, v1.h[0]
-; CHECK-NEXT: ret
+; CHECK-SD-LABEL: test_vqrdmlshh_laneq_s16:
+; CHECK-SD: // %bb.0: // %entry
+; CHECK-SD-NEXT: fmov s1, w0
+; CHECK-SD-NEXT: fmov s2, w1
+; CHECK-SD-NEXT: sqrdmlsh v1.4h, v2.4h, v0.h[7]
+; CHECK-SD-NEXT: umov w0, v1.h[0]
+; CHECK-SD-NEXT: ret
+;
+; CHECK-GI-LABEL: test_vqrdmlshh_laneq_s16:
+; CHECK-GI: // %bb.0: // %entry
+; CHECK-GI-NEXT: ext v0.16b, v0.16b, v0.16b, #14
+; CHECK-GI-NEXT: fmov s1, w0
+; CHECK-GI-NEXT: fmov s2, w1
+; CHECK-GI-NEXT: sqrdmlsh v1.4h, v2.4h, v0.4h
+; CHECK-GI-NEXT: umov w0, v1.h[0]
+; CHECK-GI-NEXT: ret
entry:
%0 = insertelement <4 x i16> undef, i16 %a, i64 0
%1 = insertelement <4 x i16> undef, i16 %b, i64 0
More information about the llvm-commits
mailing list