Skip to content

[SLP][NFC] Add a test with the optimistic extractelements emission, NFC#201192

Merged
alexey-bataev merged 1 commit into
mainfrom
users/alexey-bataev/spr/slpnfc-add-a-test-with-the-optimistic-extractelements-emission-nfc
Jun 2, 2026
Merged

[SLP][NFC] Add a test with the optimistic extractelements emission, NFC#201192
alexey-bataev merged 1 commit into
mainfrom
users/alexey-bataev/spr/slpnfc-add-a-test-with-the-optimistic-extractelements-emission-nfc

Conversation

@alexey-bataev
Copy link
Copy Markdown
Member

No description provided.

Created using spr 1.3.7
@alexey-bataev alexey-bataev merged commit e15e510 into main Jun 2, 2026
7 of 12 checks passed
@alexey-bataev alexey-bataev deleted the users/alexey-bataev/spr/slpnfc-add-a-test-with-the-optimistic-extractelements-emission-nfc branch June 2, 2026 20:24
@llvmorg-github-actions
Copy link
Copy Markdown

@llvm/pr-subscribers-llvm-transforms

Author: Alexey Bataev (alexey-bataev)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/201192.diff

1 Files Affected:

  • (added) llvm/test/Transforms/SLPVectorizer/ARM/extract-cost-scale-nullptr-user.ll (+71)
diff --git a/llvm/test/Transforms/SLPVectorizer/ARM/extract-cost-scale-nullptr-user.ll b/llvm/test/Transforms/SLPVectorizer/ARM/extract-cost-scale-nullptr-user.ll
new file mode 100644
index 0000000000000..d6cab1545784b
--- /dev/null
+++ b/llvm/test/Transforms/SLPVectorizer/ARM/extract-cost-scale-nullptr-user.ll
@@ -0,0 +1,71 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt -passes=slp-vectorizer -mtriple=thumbv8.1m.main-unknown-none-eabihf -S -mattr=+mve < %s | FileCheck %s
+
+define void @test(ptr %p) {
+; CHECK-LABEL: define void @test(
+; CHECK-SAME: ptr [[P:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT:  [[ENTRY:.*]]:
+; CHECK-NEXT:    br label %[[LOOP:.*]]
+; CHECK:       [[LOOP]]:
+; CHECK-NEXT:    [[IV:%.*]] = phi i32 [ 0, %[[ENTRY]] ], [ [[NIV:%.*]], %[[LOOP]] ]
+; CHECK-NEXT:    [[TMP0:%.*]] = phi <4 x i32> [ zeroinitializer, %[[ENTRY]] ], [ [[TMP2:%.*]], %[[LOOP]] ]
+; CHECK-NEXT:    [[TMP1:%.*]] = extractelement <4 x i32> [[TMP0]], i32 3
+; CHECK-NEXT:    [[A0:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
+; CHECK-NEXT:    store i8 0, ptr [[A0]], align 1
+; CHECK-NEXT:    [[A1:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
+; CHECK-NEXT:    store i8 1, ptr [[A1]], align 1
+; CHECK-NEXT:    [[A2:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
+; CHECK-NEXT:    store i8 2, ptr [[A2]], align 1
+; CHECK-NEXT:    [[A3:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
+; CHECK-NEXT:    store i8 3, ptr [[A3]], align 1
+; CHECK-NEXT:    [[A4:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
+; CHECK-NEXT:    store i8 4, ptr [[A4]], align 1
+; CHECK-NEXT:    [[A5:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
+; CHECK-NEXT:    store i8 5, ptr [[A5]], align 1
+; CHECK-NEXT:    [[A6:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
+; CHECK-NEXT:    store i8 6, ptr [[A6]], align 1
+; CHECK-NEXT:    [[A7:%.*]] = getelementptr i8, ptr [[P]], i32 [[TMP1]]
+; CHECK-NEXT:    store i8 7, ptr [[A7]], align 1
+; CHECK-NEXT:    [[TMP2]] = add nuw nsw <4 x i32> [[TMP0]], <i32 32, i32 32, i32 32, i32 16>
+; CHECK-NEXT:    [[NIV]] = add nuw nsw i32 [[IV]], 16
+; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 [[NIV]], 512
+; CHECK-NEXT:    br i1 [[C]], label %[[EXIT:.*]], label %[[LOOP]]
+; CHECK:       [[EXIT]]:
+; CHECK-NEXT:    ret void
+;
+entry:
+  br label %loop
+
+loop:
+  %i0 = phi i32 [ 0, %entry ], [ %n0, %loop ]
+  %i1 = phi i32 [ 0, %entry ], [ %n1, %loop ]
+  %i2 = phi i32 [ 0, %entry ], [ %n2, %loop ]
+  %i3 = phi i32 [ 0, %entry ], [ %n3, %loop ]
+  %iv = phi i32 [ 0, %entry ], [ %niv, %loop ]
+  %a0 = getelementptr i8, ptr %p, i32 %i1
+  store i8 0, ptr %a0, align 1
+  %a1 = getelementptr i8, ptr %p, i32 %i1
+  store i8 1, ptr %a1, align 1
+  %a2 = getelementptr i8, ptr %p, i32 %i1
+  store i8 2, ptr %a2, align 1
+  %a3 = getelementptr i8, ptr %p, i32 %i1
+  store i8 3, ptr %a3, align 1
+  %a4 = getelementptr i8, ptr %p, i32 %i1
+  store i8 4, ptr %a4, align 1
+  %a5 = getelementptr i8, ptr %p, i32 %i1
+  store i8 5, ptr %a5, align 1
+  %a6 = getelementptr i8, ptr %p, i32 %i1
+  store i8 6, ptr %a6, align 1
+  %a7 = getelementptr i8, ptr %p, i32 %i1
+  store i8 7, ptr %a7, align 1
+  %n0 = add nuw nsw i32 %i0, 32
+  %n1 = add nuw nsw i32 %i1, 16
+  %n2 = add nuw nsw i32 %i2, 32
+  %n3 = add nuw nsw i32 %i3, 32
+  %niv = add nuw nsw i32 %iv, 16
+  %c = icmp eq i32 %niv, 512
+  br i1 %c, label %exit, label %loop
+
+exit:
+  ret void
+}

llvm-upstreamsync Bot pushed a commit to qualcomm/cpullvm-toolchain that referenced this pull request Jun 2, 2026
llvm-sync Bot pushed a commit to arm/arm-toolchain that referenced this pull request Jun 2, 2026
yingopq pushed a commit to yingopq/llvm-project that referenced this pull request Jun 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant