[llvm] a7591ef - [SLP][NFC]Add a test with the revectorization of the struct-returning intrinsics
via llvm-commits
llvm-commits at lists.llvm.org
Fri May 8 09:59:17 PDT 2026
Author: Alexey Bataev
Date: 2026-05-08T12:59:13-04:00
New Revision: a7591ef9419ee6047f551b4f16b93dddc00de1b9
URL: https://github.com/llvm/llvm-project/commit/a7591ef9419ee6047f551b4f16b93dddc00de1b9
DIFF: https://github.com/llvm/llvm-project/commit/a7591ef9419ee6047f551b4f16b93dddc00de1b9.diff
LOG: [SLP][NFC]Add a test with the revectorization of the struct-returning intrinsics
Reviewers:
Pull Request: https://github.com/llvm/llvm-project/pull/196581
Added:
llvm/test/Transforms/SLPVectorizer/struct-return-revec.ll
Modified:
Removed:
################################################################################
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