[llvm] [SLP][NFC]Add a test with non-vectorized sincos, NFC (PR #201312)
Alexey Bataev via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 3 03:42:00 PDT 2026
https://github.com/alexey-bataev created https://github.com/llvm/llvm-project/pull/201312
None
>From 00d87721489b40aa8fa7ec7c7f971afabac7e589 Mon Sep 17 00:00:00 2001
From: Alexey Bataev <a.bataev at outlook.com>
Date: Wed, 3 Jun 2026 03:41:47 -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
---
.../Transforms/SLPVectorizer/X86/sincos.ll | 114 ++++++++++++++++++
1 file changed, 114 insertions(+)
create mode 100644 llvm/test/Transforms/SLPVectorizer/X86/sincos.ll
diff --git a/llvm/test/Transforms/SLPVectorizer/X86/sincos.ll b/llvm/test/Transforms/SLPVectorizer/X86/sincos.ll
new file mode 100644
index 0000000000000..f95aa24cc14d6
--- /dev/null
+++ b/llvm/test/Transforms/SLPVectorizer/X86/sincos.ll
@@ -0,0 +1,114 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu -mcpu=znver5 -vector-library=AMDLIBM < %s | FileCheck %s
+
+ at phase = global [8 x double] zeroinitializer, align 16
+ at sinval = global [8 x double] zeroinitializer, align 16
+ at cosval = global [8 x double] zeroinitializer, align 16
+
+define i32 @test() {
+; CHECK-LABEL: define i32 @test(
+; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT: [[ENTRY:.*:]]
+; CHECK-NEXT: [[TMP0:%.*]] = load double, ptr @phase, align 16
+; CHECK-NEXT: [[TMP1:%.*]] = tail call fast { double, double } @llvm.sincos.f64(double [[TMP0]])
+; CHECK-NEXT: [[TMP2:%.*]] = extractvalue { double, double } [[TMP1]], 0
+; CHECK-NEXT: [[TMP3:%.*]] = extractvalue { double, double } [[TMP1]], 1
+; CHECK-NEXT: store double [[TMP2]], ptr @sinval, align 16
+; CHECK-NEXT: store double [[TMP3]], ptr @cosval, align 16
+; CHECK-NEXT: [[TMP4:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 8), align 8
+; CHECK-NEXT: [[TMP5:%.*]] = tail call fast { double, double } @llvm.sincos.f64(double [[TMP4]])
+; CHECK-NEXT: [[TMP6:%.*]] = extractvalue { double, double } [[TMP5]], 0
+; CHECK-NEXT: [[TMP7:%.*]] = extractvalue { double, double } [[TMP5]], 1
+; CHECK-NEXT: store double [[TMP6]], ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 8), align 8
+; CHECK-NEXT: store double [[TMP7]], ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 8), align 8
+; CHECK-NEXT: [[TMP8:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 16), align 16
+; CHECK-NEXT: [[TMP9:%.*]] = tail call fast { double, double } @llvm.sincos.f64(double [[TMP8]])
+; CHECK-NEXT: [[TMP10:%.*]] = extractvalue { double, double } [[TMP9]], 0
+; CHECK-NEXT: [[TMP11:%.*]] = extractvalue { double, double } [[TMP9]], 1
+; CHECK-NEXT: store double [[TMP10]], ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 16), align 16
+; CHECK-NEXT: store double [[TMP11]], ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 16), align 16
+; CHECK-NEXT: [[TMP12:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 24), align 8
+; CHECK-NEXT: [[TMP13:%.*]] = tail call fast { double, double } @llvm.sincos.f64(double [[TMP12]])
+; CHECK-NEXT: [[TMP14:%.*]] = extractvalue { double, double } [[TMP13]], 0
+; CHECK-NEXT: [[TMP15:%.*]] = extractvalue { double, double } [[TMP13]], 1
+; CHECK-NEXT: store double [[TMP14]], ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 24), align 8
+; CHECK-NEXT: store double [[TMP15]], ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 24), align 8
+; CHECK-NEXT: [[TMP16:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 32), align 16
+; CHECK-NEXT: [[TMP17:%.*]] = tail call fast { double, double } @llvm.sincos.f64(double [[TMP16]])
+; CHECK-NEXT: [[TMP18:%.*]] = extractvalue { double, double } [[TMP17]], 0
+; CHECK-NEXT: [[TMP19:%.*]] = extractvalue { double, double } [[TMP17]], 1
+; CHECK-NEXT: store double [[TMP18]], ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 32), align 16
+; CHECK-NEXT: store double [[TMP19]], ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 32), align 16
+; CHECK-NEXT: [[TMP20:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 40), align 8
+; CHECK-NEXT: [[TMP21:%.*]] = tail call fast { double, double } @llvm.sincos.f64(double [[TMP20]])
+; CHECK-NEXT: [[TMP22:%.*]] = extractvalue { double, double } [[TMP21]], 0
+; CHECK-NEXT: [[TMP23:%.*]] = extractvalue { double, double } [[TMP21]], 1
+; CHECK-NEXT: store double [[TMP22]], ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 40), align 8
+; CHECK-NEXT: store double [[TMP23]], ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 40), align 8
+; CHECK-NEXT: [[TMP24:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 48), align 16
+; CHECK-NEXT: [[TMP25:%.*]] = tail call fast { double, double } @llvm.sincos.f64(double [[TMP24]])
+; CHECK-NEXT: [[TMP26:%.*]] = extractvalue { double, double } [[TMP25]], 0
+; CHECK-NEXT: [[TMP27:%.*]] = extractvalue { double, double } [[TMP25]], 1
+; CHECK-NEXT: store double [[TMP26]], ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 48), align 16
+; CHECK-NEXT: store double [[TMP27]], ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 48), align 16
+; CHECK-NEXT: [[TMP28:%.*]] = load double, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 56), align 8
+; CHECK-NEXT: [[TMP29:%.*]] = tail call fast { double, double } @llvm.sincos.f64(double [[TMP28]])
+; CHECK-NEXT: [[TMP30:%.*]] = extractvalue { double, double } [[TMP29]], 0
+; CHECK-NEXT: [[TMP31:%.*]] = extractvalue { double, double } [[TMP29]], 1
+; CHECK-NEXT: store double [[TMP30]], ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 56), align 8
+; CHECK-NEXT: store double [[TMP31]], ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 56), align 8
+; CHECK-NEXT: ret i32 0
+;
+entry:
+ %0 = load double, ptr @phase, align 16
+ %1 = tail call fast { double, double } @llvm.sincos.f64(double %0)
+ %2 = extractvalue { double, double } %1, 0
+ %3 = extractvalue { double, double } %1, 1
+ store double %2, ptr @sinval, align 16
+ store double %3, ptr @cosval, align 16
+ %4 = load double, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 8), align 8
+ %5 = tail call fast { double, double } @llvm.sincos.f64(double %4)
+ %6 = extractvalue { double, double } %5, 0
+ %7 = extractvalue { double, double } %5, 1
+ store double %6, ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 8), align 8
+ store double %7, ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 8), align 8
+ %8 = load double, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 16), align 16
+ %9 = tail call fast { double, double } @llvm.sincos.f64(double %8)
+ %10 = extractvalue { double, double } %9, 0
+ %11 = extractvalue { double, double } %9, 1
+ store double %10, ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 16), align 16
+ store double %11, ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 16), align 16
+ %12 = load double, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 24), align 8
+ %13 = tail call fast { double, double } @llvm.sincos.f64(double %12)
+ %14 = extractvalue { double, double } %13, 0
+ %15 = extractvalue { double, double } %13, 1
+ store double %14, ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 24), align 8
+ store double %15, ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 24), align 8
+ %16 = load double, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 32), align 16
+ %17 = tail call fast { double, double } @llvm.sincos.f64(double %16)
+ %18 = extractvalue { double, double } %17, 0
+ %19 = extractvalue { double, double } %17, 1
+ store double %18, ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 32), align 16
+ store double %19, ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 32), align 16
+ %20 = load double, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 40), align 8
+ %21 = tail call fast { double, double } @llvm.sincos.f64(double %20)
+ %22 = extractvalue { double, double } %21, 0
+ %23 = extractvalue { double, double } %21, 1
+ store double %22, ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 40), align 8
+ store double %23, ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 40), align 8
+ %24 = load double, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 48), align 16
+ %25 = tail call fast { double, double } @llvm.sincos.f64(double %24)
+ %26 = extractvalue { double, double } %25, 0
+ %27 = extractvalue { double, double } %25, 1
+ store double %26, ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 48), align 16
+ store double %27, ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 48), align 16
+ %28 = load double, ptr getelementptr inbounds nuw (i8, ptr @phase, i64 56), align 8
+ %29 = tail call fast { double, double } @llvm.sincos.f64(double %28)
+ %30 = extractvalue { double, double } %29, 0
+ %31 = extractvalue { double, double } %29, 1
+ store double %30, ptr getelementptr inbounds nuw (i8, ptr @sinval, i64 56), align 8
+ store double %31, ptr getelementptr inbounds nuw (i8, ptr @cosval, i64 56), align 8
+ ret i32 0
+}
+
+declare { double, double } @llvm.sincos.f64(double)
More information about the llvm-commits
mailing list