[llvm] [SLP] Test for code size costing changes (PR #217400)

Ryan Buchner via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 19 11:21:08 PDT 2026


https://github.com/bababuck updated https://github.com/llvm/llvm-project/pull/217400

>From dcef9db0c71f03624471967fb0ab18289226fb75 Mon Sep 17 00:00:00 2001
From: bababuck <buchner.ryan at gmail.com>
Date: Wed, 19 Aug 2026 07:43:34 -0700
Subject: [PATCH 1/2] [SLP] Test for code size costing

---
 .../Transforms/SLPVectorizer/X86/cost-size.ll | 70 +++++++++++++++++++
 1 file changed, 70 insertions(+)
 create mode 100644 llvm/test/Transforms/SLPVectorizer/X86/cost-size.ll

diff --git a/llvm/test/Transforms/SLPVectorizer/X86/cost-size.ll b/llvm/test/Transforms/SLPVectorizer/X86/cost-size.ll
new file mode 100644
index 0000000000000..6e15f2f001065
--- /dev/null
+++ b/llvm/test/Transforms/SLPVectorizer/X86/cost-size.ll
@@ -0,0 +1,70 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -S -slp-threshold=0 -passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK
+
+; Profitable to vectorize based on size, but not based on reciprocal throughput
+
+define i16 @test_optsize(ptr %p, ptr %inc) #0 {
+; CHECK-LABEL: define i16 @test_optsize(
+; CHECK-SAME: ptr [[P:%.*]], ptr [[INC:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[E0:%.*]] = load i16, ptr [[P]], align 4
+; CHECK-NEXT:    [[E1:%.*]] = load i16, ptr [[INC]], align 2
+; CHECK-NEXT:    [[TMP3:%.*]] = udiv i16 [[E0]], 13
+; CHECK-NEXT:    [[TMP4:%.*]] = udiv i16 [[E1]], 14
+; CHECK-NEXT:    [[A:%.*]] = add i16 [[TMP3]], [[TMP4]]
+; CHECK-NEXT:    ret i16 [[A]]
+;
+entry:
+  %e0 = load i16, ptr %p, align 4
+  %e1 = load i16, ptr %inc, align 2
+
+  %d0 = udiv i16 %e0, 13
+  %d1 = udiv i16 %e1, 14
+  %a = add i16 %d0, %d1
+  ret i16 %a
+}
+
+define i16 @testc_optsize(ptr %p, ptr %inc) #1 {
+; CHECK-LABEL: define i16 @testc_optsize(
+; CHECK-SAME: ptr [[P:%.*]], ptr [[INC:%.*]]) #[[ATTR1:[0-9]+]] {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[E0:%.*]] = load i16, ptr [[P]], align 4
+; CHECK-NEXT:    [[E1:%.*]] = load i16, ptr [[INC]], align 2
+; CHECK-NEXT:    [[TMP3:%.*]] = udiv i16 [[E0]], 13
+; CHECK-NEXT:    [[TMP4:%.*]] = udiv i16 [[E1]], 14
+; CHECK-NEXT:    [[A:%.*]] = add i16 [[TMP3]], [[TMP4]]
+; CHECK-NEXT:    ret i16 [[A]]
+;
+entry:
+  %e0 = load i16, ptr %p, align 4
+  %e1 = load i16, ptr %inc, align 2
+
+  %d0 = udiv i16 %e0, 13
+  %d1 = udiv i16 %e1, 14
+  %a = add i16 %d0, %d1
+  ret i16 %a
+}
+
+define i16 @testsf_optsize(ptr %p, ptr %inc) {
+; CHECK-LABEL: define i16 @testsf_optsize(
+; CHECK-SAME: ptr [[P:%.*]], ptr [[INC:%.*]]) {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[E0:%.*]] = load i16, ptr [[P]], align 4
+; CHECK-NEXT:    [[E1:%.*]] = load i16, ptr [[INC]], align 2
+; CHECK-NEXT:    [[D0:%.*]] = udiv i16 [[E0]], 13
+; CHECK-NEXT:    [[D1:%.*]] = udiv i16 [[E1]], 14
+; CHECK-NEXT:    [[A:%.*]] = add i16 [[D0]], [[D1]]
+; CHECK-NEXT:    ret i16 [[A]]
+;
+entry:
+  %e0 = load i16, ptr %p, align 4
+  %e1 = load i16, ptr %inc, align 2
+
+  %d0 = udiv i16 %e0, 13
+  %d1 = udiv i16 %e1, 14
+  %a = add i16 %d0, %d1
+  ret i16 %a
+}
+
+attributes #0 = { optsize }
+attributes #1 = { minsize optsize }

>From de2661021f87a74c8b2b48d0f2f072cb3ec8e0c7 Mon Sep 17 00:00:00 2001
From: bababuck <buchner.ryan at gmail.com>
Date: Wed, 19 Aug 2026 11:10:51 -0700
Subject: [PATCH 2/2] Remove slp-threshold

---
 llvm/test/Transforms/SLPVectorizer/X86/cost-size.ll | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/test/Transforms/SLPVectorizer/X86/cost-size.ll b/llvm/test/Transforms/SLPVectorizer/X86/cost-size.ll
index 6e15f2f001065..19d387f6c54de 100644
--- a/llvm/test/Transforms/SLPVectorizer/X86/cost-size.ll
+++ b/llvm/test/Transforms/SLPVectorizer/X86/cost-size.ll
@@ -1,5 +1,5 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
-; RUN: opt -S -slp-threshold=0 -passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK
+; RUN: opt -S -passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK
 
 ; Profitable to vectorize based on size, but not based on reciprocal throughput
 



More information about the llvm-commits mailing list