[llvm] eb819b9 - [SLP][NFC]Add a test with incorrect nsw in reordered sub feeding equal cmp, NFC
via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 16 15:53:17 PDT 2026
Author: Alexey Bataev
Date: 2026-07-16T18:53:12-04:00
New Revision: eb819b90735b819c1afd98ab3aa14183fa57157e
URL: https://github.com/llvm/llvm-project/commit/eb819b90735b819c1afd98ab3aa14183fa57157e
DIFF: https://github.com/llvm/llvm-project/commit/eb819b90735b819c1afd98ab3aa14183fa57157e.diff
LOG: [SLP][NFC]Add a test with incorrect nsw in reordered sub feeding equal cmp, NFC
Reviewers:
Pull Request: https://github.com/llvm/llvm-project/pull/210204
Added:
llvm/test/Transforms/SLPVectorizer/sub-nsw-icmp-eq-zero-reorder.ll
Modified:
Removed:
################################################################################
diff --git a/llvm/test/Transforms/SLPVectorizer/sub-nsw-icmp-eq-zero-reorder.ll b/llvm/test/Transforms/SLPVectorizer/sub-nsw-icmp-eq-zero-reorder.ll
new file mode 100644
index 0000000000000..344ad155110b6
--- /dev/null
+++ b/llvm/test/Transforms/SLPVectorizer/sub-nsw-icmp-eq-zero-reorder.ll
@@ -0,0 +1,43 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -passes=slp-vectorizer -S < %s | FileCheck %s
+
+; The last sub has swapped operands, so SLP (treating a sub feeding icmp eq 0 as
+; commutative) normalizes operand order; nsw must be dropped from the result.
+
+define <4 x i1> @sub_nsw_icmp_eq_zero(i8 %a0, i8 %a1, i8 %a2, i8 %a3, ptr %pl) {
+; CHECK-LABEL: define <4 x i1> @sub_nsw_icmp_eq_zero(
+; CHECK-SAME: i8 [[A0:%.*]], i8 [[A1:%.*]], i8 [[A2:%.*]], i8 [[A3:%.*]], ptr [[PL:%.*]]) {
+; CHECK-NEXT: [[ENTRY:.*:]]
+; CHECK-NEXT: [[PL0:%.*]] = getelementptr i8, ptr [[PL]], i32 0
+; CHECK-NEXT: [[TMP0:%.*]] = load <4 x i8>, ptr [[PL0]], align 1
+; CHECK-NEXT: [[TMP1:%.*]] = insertelement <4 x i8> poison, i8 [[A0]], i64 0
+; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x i8> [[TMP1]], i8 [[A1]], i64 1
+; CHECK-NEXT: [[TMP3:%.*]] = insertelement <4 x i8> [[TMP2]], i8 [[A2]], i64 2
+; CHECK-NEXT: [[TMP4:%.*]] = insertelement <4 x i8> [[TMP3]], i8 [[A3]], i64 3
+; CHECK-NEXT: [[TMP5:%.*]] = sub nsw <4 x i8> [[TMP0]], [[TMP4]]
+; CHECK-NEXT: [[TMP6:%.*]] = icmp eq <4 x i8> [[TMP5]], zeroinitializer
+; CHECK-NEXT: ret <4 x i1> [[TMP6]]
+;
+entry:
+ %pl0 = getelementptr i8, ptr %pl, i32 0
+ %pl1 = getelementptr i8, ptr %pl, i32 1
+ %pl2 = getelementptr i8, ptr %pl, i32 2
+ %pl3 = getelementptr i8, ptr %pl, i32 3
+ %l0 = load i8, ptr %pl0
+ %l1 = load i8, ptr %pl1
+ %l2 = load i8, ptr %pl2
+ %l3 = load i8, ptr %pl3
+ %s0 = sub nsw i8 %a0, %l0
+ %s1 = sub nsw i8 %a1, %l1
+ %s2 = sub nsw i8 %a2, %l2
+ %s3 = sub nsw i8 %l3, %a3
+ %c0 = icmp eq i8 %s0, 0
+ %c1 = icmp eq i8 %s1, 0
+ %c2 = icmp eq i8 %s2, 0
+ %c3 = icmp eq i8 %s3, 0
+ %v0 = insertelement <4 x i1> poison, i1 %c0, i32 0
+ %v1 = insertelement <4 x i1> %v0, i1 %c1, i32 1
+ %v2 = insertelement <4 x i1> %v1, i1 %c2, i32 2
+ %v3 = insertelement <4 x i1> %v2, i1 %c3, i32 3
+ ret <4 x i1> %v3
+}
More information about the llvm-commits
mailing list