[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