[llvm] [SLP][NFC]Add a test with the revectorization of the struct-returning intrinsics (PR #196581)
Alexey Bataev via llvm-commits
llvm-commits at lists.llvm.org
Fri May 8 09:58:41 PDT 2026
https://github.com/alexey-bataev created https://github.com/llvm/llvm-project/pull/196581
None
>From 50edaefcc47abf23e5bc477fe194b038e09d6828 Mon Sep 17 00:00:00 2001
From: Alexey Bataev <a.bataev at outlook.com>
Date: Fri, 8 May 2026 09:58:29 -0700
Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20initia?=
=?UTF-8?q?l=20version?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Created using spr 1.3.7
---
.../SLPVectorizer/struct-return-revec.ll | 65 +++++++++++++++++++
1 file changed, 65 insertions(+)
create mode 100644 llvm/test/Transforms/SLPVectorizer/struct-return-revec.ll
diff --git a/llvm/test/Transforms/SLPVectorizer/struct-return-revec.ll b/llvm/test/Transforms/SLPVectorizer/struct-return-revec.ll
new file mode 100644
index 0000000000000..45d6e395b6886
--- /dev/null
+++ b/llvm/test/Transforms/SLPVectorizer/struct-return-revec.ll
@@ -0,0 +1,65 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -S --passes=slp-vectorizer -slp-revec < %s | FileCheck %s
+
+ at phase = dso_local local_unnamed_addr global [8 x double] zeroinitializer, align 16
+ at sinval = dso_local local_unnamed_addr global [8 x double] zeroinitializer, align 16
+ at cosval = dso_local local_unnamed_addr global [8 x double] zeroinitializer, align 16
+
+define i32 @test() {
+; CHECK-LABEL: define i32 @test() {
+; CHECK-NEXT: [[ENTRY:.*:]]
+; CHECK-NEXT: [[TMP0:%.*]] = load <2 x double>, ptr @phase, align 16
+; CHECK-NEXT: [[TMP1:%.*]] = tail call fast { <2 x double>, <2 x double> } @llvm.sincos.v2f64(<2 x double> [[TMP0]])
+; CHECK-NEXT: [[TMP2:%.*]] = extractvalue { <2 x double>, <2 x double> } [[TMP1]], 0
+; CHECK-NEXT: [[TMP3:%.*]] = extractvalue { <2 x double>, <2 x double> } [[TMP1]], 1
+; CHECK-NEXT: store <2 x double> [[TMP2]], ptr @sinval, align 16
+; CHECK-NEXT: store <2 x double> [[TMP3]], ptr @cosval, align 16
+; CHECK-NEXT: [[TMP4:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 16), align 8
+; CHECK-NEXT: [[TMP5:%.*]] = tail call fast { <2 x double>, <2 x double> } @llvm.sincos.v2f64(<2 x double> [[TMP4]])
+; CHECK-NEXT: [[TMP6:%.*]] = extractvalue { <2 x double>, <2 x double> } [[TMP5]], 0
+; CHECK-NEXT: [[TMP7:%.*]] = extractvalue { <2 x double>, <2 x double> } [[TMP5]], 1
+; CHECK-NEXT: store <2 x double> [[TMP6]], ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 16), align 8
+; CHECK-NEXT: store <2 x double> [[TMP7]], ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 16), align 8
+; CHECK-NEXT: [[TMP8:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 32), align 16
+; CHECK-NEXT: [[TMP9:%.*]] = tail call fast { <2 x double>, <2 x double> } @llvm.sincos.v2f64(<2 x double> [[TMP8]])
+; CHECK-NEXT: [[TMP10:%.*]] = extractvalue { <2 x double>, <2 x double> } [[TMP9]], 0
+; CHECK-NEXT: [[TMP11:%.*]] = extractvalue { <2 x double>, <2 x double> } [[TMP9]], 1
+; CHECK-NEXT: store <2 x double> [[TMP10]], ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 32), align 16
+; CHECK-NEXT: store <2 x double> [[TMP11]], ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 32), align 16
+; CHECK-NEXT: [[TMP12:%.*]] = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 48), align 8
+; CHECK-NEXT: [[TMP13:%.*]] = tail call fast { <2 x double>, <2 x double> } @llvm.sincos.v2f64(<2 x double> [[TMP12]])
+; CHECK-NEXT: [[TMP14:%.*]] = extractvalue { <2 x double>, <2 x double> } [[TMP13]], 0
+; CHECK-NEXT: [[TMP15:%.*]] = extractvalue { <2 x double>, <2 x double> } [[TMP13]], 1
+; CHECK-NEXT: store <2 x double> [[TMP14]], ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 48), align 8
+; CHECK-NEXT: store <2 x double> [[TMP15]], ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 48), align 8
+; CHECK-NEXT: ret i32 0
+;
+entry:
+ %0 = load <2 x double>, ptr @phase, align 16
+ %1 = tail call fast { <2 x double>, <2 x double> } @llvm.sincos.v2f64(<2 x double> %0)
+ %2 = extractvalue { <2 x double>, <2 x double> } %1, 0
+ %3 = extractvalue { <2 x double>, <2 x double> } %1, 1
+ store <2 x double> %2, ptr @sinval, align 16
+ store <2 x double> %3, ptr @cosval, align 16
+ %4 = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 16), align 8
+ %5 = tail call fast { <2 x double>, <2 x double> } @llvm.sincos.v2f64(<2 x double> %4)
+ %6 = extractvalue { <2 x double>, <2 x double> } %5, 0
+ %7 = extractvalue { <2 x double>, <2 x double> } %5, 1
+ store <2 x double> %6, ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 16), align 8
+ store <2 x double> %7, ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 16), align 8
+ %8 = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 32), align 16
+ %9 = tail call fast { <2 x double>, <2 x double> } @llvm.sincos.v2f64(<2 x double> %8)
+ %10 = extractvalue { <2 x double>, <2 x double> } %9, 0
+ %11 = extractvalue { <2 x double>, <2 x double> } %9, 1
+ store <2 x double> %10, ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 32), align 16
+ store <2 x double> %11, ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 32), align 16
+ %12 = load <2 x double>, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 48), align 8
+ %13 = tail call fast { <2 x double>, <2 x double> } @llvm.sincos.v2f64(<2 x double> %12)
+ %14 = extractvalue { <2 x double>, <2 x double> } %13, 0
+ %15 = extractvalue { <2 x double>, <2 x double> } %13, 1
+ store <2 x double> %14, ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 48), align 8
+ store <2 x double> %15, ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 48), align 8
+ ret i32 0
+}
+
+declare { <2 x double>, <2 x double> } @llvm.sincos.v2f64(<2 x double>)
More information about the llvm-commits
mailing list