[llvm] [SLP][NFC]Add an extra test with altop nodes reordering, NFC (PR #215367)

Alexey Bataev via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 10 12:03:37 PDT 2026


https://github.com/alexey-bataev created https://github.com/llvm/llvm-project/pull/215367

None

>From 9c39207256234e595298f5e4040f5b540af1af93 Mon Sep 17 00:00:00 2001
From: Alexey Bataev <a.bataev at outlook.com>
Date: Mon, 10 Aug 2026 12:03:23 -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/supernode.ll | 55 +++++++++++++++++++
 1 file changed, 55 insertions(+)

diff --git a/llvm/test/Transforms/SLPVectorizer/X86/supernode.ll b/llvm/test/Transforms/SLPVectorizer/X86/supernode.ll
index 8c3aac2d59c11..468e5c247e11b 100644
--- a/llvm/test/Transforms/SLPVectorizer/X86/supernode.ll
+++ b/llvm/test/Transforms/SLPVectorizer/X86/supernode.ll
@@ -124,6 +124,61 @@ entry:
   ret void
 }
 
+; S[0] = ((A[0] - B[0]) - D[0]) - C[0]
+; S[1] = ((B[1] + C[1]) + D[1]) + A[1]
+define void @test_addsub_alt_commuted(ptr %Aarray, ptr %Barray, ptr %Carray, ptr %Darray, ptr %Sarray) {
+; ENABLED-LABEL: @test_addsub_alt_commuted(
+; ENABLED-NEXT:  entry:
+; ENABLED-NEXT:    [[TMP0:%.*]] = load <2 x double>, ptr [[AARRAY:%.*]], align 8
+; ENABLED-NEXT:    [[TMP1:%.*]] = load <2 x double>, ptr [[BARRAY:%.*]], align 8
+; ENABLED-NEXT:    [[TMP2:%.*]] = load <2 x double>, ptr [[CARRAY:%.*]], align 8
+; ENABLED-NEXT:    [[TMP3:%.*]] = load <2 x double>, ptr [[DARRAY:%.*]], align 8
+; ENABLED-NEXT:    [[TMP4:%.*]] = shufflevector <2 x double> [[TMP0]], <2 x double> [[TMP2]], <2 x i32> <i32 0, i32 3>
+; ENABLED-NEXT:    [[TMP5:%.*]] = fsub fast <2 x double> [[TMP4]], [[TMP1]]
+; ENABLED-NEXT:    [[TMP12:%.*]] = fadd fast <2 x double> [[TMP4]], [[TMP1]]
+; ENABLED-NEXT:    [[TMP7:%.*]] = shufflevector <2 x double> [[TMP5]], <2 x double> [[TMP12]], <2 x i32> <i32 0, i32 3>
+; ENABLED-NEXT:    [[TMP8:%.*]] = fsub fast <2 x double> [[TMP7]], [[TMP3]]
+; ENABLED-NEXT:    [[TMP13:%.*]] = fadd fast <2 x double> [[TMP7]], [[TMP3]]
+; ENABLED-NEXT:    [[TMP14:%.*]] = shufflevector <2 x double> [[TMP8]], <2 x double> [[TMP13]], <2 x i32> <i32 0, i32 3>
+; ENABLED-NEXT:    [[TMP11:%.*]] = shufflevector <2 x double> [[TMP2]], <2 x double> [[TMP0]], <2 x i32> <i32 0, i32 3>
+; ENABLED-NEXT:    [[TMP6:%.*]] = fsub fast <2 x double> [[TMP14]], [[TMP11]]
+; ENABLED-NEXT:    [[TMP9:%.*]] = fadd fast <2 x double> [[TMP14]], [[TMP11]]
+; ENABLED-NEXT:    [[TMP10:%.*]] = shufflevector <2 x double> [[TMP6]], <2 x double> [[TMP9]], <2 x i32> <i32 0, i32 3>
+; ENABLED-NEXT:    store <2 x double> [[TMP10]], ptr [[SARRAY:%.*]], align 8
+; ENABLED-NEXT:    ret void
+;
+entry:
+  %idxA1 = getelementptr inbounds double, ptr %Aarray, i64 1
+  %idxB1 = getelementptr inbounds double, ptr %Barray, i64 1
+  %idxC1 = getelementptr inbounds double, ptr %Carray, i64 1
+  %idxD1 = getelementptr inbounds double, ptr %Darray, i64 1
+  %idxS1 = getelementptr inbounds double, ptr %Sarray, i64 1
+
+  %A0 = load double, ptr %Aarray, align 8
+  %A1 = load double, ptr %idxA1, align 8
+
+  %B0 = load double, ptr %Barray, align 8
+  %B1 = load double, ptr %idxB1, align 8
+
+  %C0 = load double, ptr %Carray, align 8
+  %C1 = load double, ptr %idxC1, align 8
+
+  %D0 = load double, ptr %Darray, align 8
+  %D1 = load double, ptr %idxD1, align 8
+
+  %subA0B0 = fsub fast double %A0, %B0
+  %addB1C1 = fadd fast double %B1, %C1
+
+  %subA0B0D0 = fsub fast double %subA0B0, %D0
+  %addB1C1D1 = fadd fast double %D1, %addB1C1
+
+  %sub0 = fsub fast double %subA0B0D0, %C0
+  %add1 = fadd fast double %addB1C1D1, %A1
+  store double %sub0, ptr %Sarray, align 8
+  store double %add1, ptr %idxS1, align 8
+  ret void
+}
+
 ; This checks that vectorizeTree() works correctly with the supernode
 ; and does not generate uses before defs.
 ; If all of the operands of the supernode are vectorizable, then the scheduler



More information about the llvm-commits mailing list