[llvm] ea23f7f - [AArch64] Add shufflevector concat codegen tests. NFC.

Sjoerd Meijer via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 2 08:35:58 PDT 2021


Author: Sjoerd Meijer
Date: 2021-08-02T16:15:11+01:00
New Revision: ea23f7fce5deb2b55406cb61a06b0394b0c8011f

URL: https://github.com/llvm/llvm-project/commit/ea23f7fce5deb2b55406cb61a06b0394b0c8011f
DIFF: https://github.com/llvm/llvm-project/commit/ea23f7fce5deb2b55406cb61a06b0394b0c8011f.diff

LOG: [AArch64] Add shufflevector concat codegen tests. NFC.

Added: 
    llvm/test/CodeGen/AArch64/concat-vector.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/AArch64/concat-vector.ll b/llvm/test/CodeGen/AArch64/concat-vector.ll
new file mode 100644
index 000000000000..e6bf67f50911
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/concat-vector.ll
@@ -0,0 +1,115 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc < %s -mtriple=aarch64--linux-gnu | FileCheck %s
+
+define <4 x i8> @concat1(<2 x i8> %A, <2 x i8> %B) {
+; CHECK-LABEL: concat1:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    uzp1 v0.4h, v0.4h, v1.4h
+; CHECK-NEXT:    ret
+   %v4i8 = shufflevector <2 x i8> %A, <2 x i8> %B, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
+   ret <4 x i8> %v4i8
+}
+
+define <8 x i8> @concat2(<4 x i8> %A, <4 x i8> %B) {
+; CHECK-LABEL: concat2:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    uzp1 v0.8b, v0.8b, v1.8b
+; CHECK-NEXT:    ret
+   %v8i8 = shufflevector <4 x i8> %A, <4 x i8> %B, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
+   ret <8 x i8> %v8i8
+}
+
+define <16 x i8> @concat3(<8 x i8> %A, <8 x i8> %B) {
+; CHECK-LABEL: concat3:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
+; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1
+; CHECK-NEXT:    mov v0.d[1], v1.d[0]
+; CHECK-NEXT:    ret
+   %v16i8 = shufflevector <8 x i8> %A, <8 x i8> %B, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
+   ret <16 x i8> %v16i8
+}
+
+define <4 x i16> @concat4(<2 x i16> %A, <2 x i16> %B) {
+; CHECK-LABEL: concat4:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    uzp1 v0.4h, v0.4h, v1.4h
+; CHECK-NEXT:    ret
+   %v4i16 = shufflevector <2 x i16> %A, <2 x i16> %B, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
+   ret <4 x i16> %v4i16
+}
+
+define <8 x i16> @concat5(<4 x i16> %A, <4 x i16> %B) {
+; CHECK-LABEL: concat5:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
+; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1
+; CHECK-NEXT:    mov v0.d[1], v1.d[0]
+; CHECK-NEXT:    ret
+   %v8i16 = shufflevector <4 x i16> %A, <4 x i16> %B, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
+   ret <8 x i16> %v8i16
+}
+
+define <16 x i16> @concat6(<8 x i16>* %A, <8 x i16>* %B) {
+; CHECK-LABEL: concat6:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    ldr q0, [x0]
+; CHECK-NEXT:    ldr q1, [x1]
+; CHECK-NEXT:    ret
+   %tmp1 = load <8 x i16>, <8 x i16>* %A
+   %tmp2 = load <8 x i16>, <8 x i16>* %B
+   %v16i16 = shufflevector <8 x i16> %tmp1, <8 x i16> %tmp2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
+   ret <16 x i16> %v16i16
+}
+
+define <4 x i32> @concat7(<2 x i32> %A, <2 x i32> %B) {
+; CHECK-LABEL: concat7:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
+; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1
+; CHECK-NEXT:    mov v0.d[1], v1.d[0]
+; CHECK-NEXT:    ret
+   %v4i32 = shufflevector <2 x i32> %A, <2 x i32> %B, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
+   ret <4 x i32> %v4i32
+}
+
+define <8 x i32> @concat8(<4 x i32>* %A, <4 x i32>* %B) {
+; CHECK-LABEL: concat8:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    ldr q0, [x0]
+; CHECK-NEXT:    ldr q1, [x1]
+; CHECK-NEXT:    ret
+   %tmp1 = load <4 x i32>, <4 x i32>* %A
+   %tmp2 = load <4 x i32>, <4 x i32>* %B
+   %v8i32 = shufflevector <4 x i32> %tmp1, <4 x i32> %tmp2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
+   ret <8 x i32> %v8i32
+}
+
+define <4 x half> @concat9(<2 x half> %A, <2 x half> %B) {
+; CHECK-LABEL: concat9:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    ext v0.8b, v0.8b, v0.8b, #4
+; CHECK-NEXT:    ext v0.8b, v0.8b, v1.8b, #4
+; CHECK-NEXT:    ret
+   %v4half= shufflevector <2 x half> %A, <2 x half> %B, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
+   ret <4 x half> %v4half
+}
+
+define <8 x half> @concat10(<4 x half> %A, <4 x half> %B) {
+; CHECK-LABEL: concat10:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
+; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1
+; CHECK-NEXT:    mov v0.d[1], v1.d[0]
+; CHECK-NEXT:    ret
+   %v8half= shufflevector <4 x half> %A, <4 x half> %B, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
+   ret <8 x half> %v8half
+}
+
+define <16 x half> @concat11(<8 x half> %A, <8 x half> %B) {
+; CHECK-LABEL: concat11:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    ret
+   %v16half= shufflevector <8 x half> %A, <8 x half> %B, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
+   ret <16 x half> %v16half
+}


        


More information about the llvm-commits mailing list