[llvm] [SLP] Precommit test for deferred extracts (PR #212658)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 28 17:07:08 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-risc-v

@llvm/pr-subscribers-llvm-transforms

Author: Ryan Buchner (bababuck)

<details>
<summary>Changes</summary>

Tests for #<!-- -->211680.

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


1 Files Affected:

- (added) llvm/test/Transforms/SLPVectorizer/RISCV/external.ll (+103) 


``````````diff
diff --git a/llvm/test/Transforms/SLPVectorizer/RISCV/external.ll b/llvm/test/Transforms/SLPVectorizer/RISCV/external.ll
new file mode 100644
index 0000000000000..1ec1aec5eb791
--- /dev/null
+++ b/llvm/test/Transforms/SLPVectorizer/RISCV/external.ll
@@ -0,0 +1,103 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
+; RUN: opt < %s -passes=slp-vectorizer -mtriple=riscv64 -mattr=+v -S | FileCheck %s --check-prefixes=DEFAULT
+
+define void @simple_copy(ptr %dest, ptr %p, ptr %dest2, ptr %dest3) {
+;, float %l0, float %l1, float %l2, float %l3, float %l4, float %l5, float %l6, float %l7) {
+; DEFAULT-LABEL: define void @simple_copy(
+; DEFAULT-SAME: ptr [[DEST:%.*]], ptr [[P:%.*]], ptr [[DEST2:%.*]], ptr [[DEST3:%.*]]) #[[ATTR0:[0-9]+]] {
+; DEFAULT-NEXT:  [[ENTRY:.*:]]
+; DEFAULT-NEXT:    [[TMP0:%.*]] = load <8 x float>, ptr [[P]], align 4
+; DEFAULT-NEXT:    [[L0:%.*]] = load float, ptr [[P]], align 4
+; DEFAULT-NEXT:    store <8 x float> [[TMP0]], ptr [[DEST]], align 4
+; DEFAULT-NEXT:    [[D1:%.*]] = getelementptr inbounds float, ptr [[DEST2]], i64 1
+; DEFAULT-NEXT:    [[D3:%.*]] = getelementptr inbounds float, ptr [[DEST2]], i64 3
+; DEFAULT-NEXT:    [[D4:%.*]] = getelementptr inbounds float, ptr [[DEST2]], i64 4
+; DEFAULT-NEXT:    [[D5:%.*]] = getelementptr inbounds float, ptr [[DEST2]], i64 5
+; DEFAULT-NEXT:    [[D6:%.*]] = getelementptr inbounds float, ptr [[DEST2]], i64 6
+; DEFAULT-NEXT:    [[D7:%.*]] = getelementptr inbounds float, ptr [[DEST2]], i64 7
+; DEFAULT-NEXT:    store float [[L0]], ptr [[DEST2]], align 4
+; DEFAULT-NEXT:    [[TMP1:%.*]] = shufflevector <8 x float> [[TMP0]], <8 x float> poison, <2 x i32> <i32 1, i32 2>
+; DEFAULT-NEXT:    store <2 x float> [[TMP1]], ptr [[D1]], align 2
+; DEFAULT-NEXT:    [[TMP2:%.*]] = extractelement <8 x float> [[TMP0]], i32 3
+; DEFAULT-NEXT:    store float [[TMP2]], ptr [[D3]], align 2
+; DEFAULT-NEXT:    [[TMP3:%.*]] = extractelement <8 x float> [[TMP0]], i32 7
+; DEFAULT-NEXT:    store float [[TMP3]], ptr [[D7]], align 2
+; DEFAULT-NEXT:    ret void
+;
+entry:
+  %inc1 = getelementptr inbounds float, ptr %p, i64 1
+  %inc2 = getelementptr inbounds float, ptr %p, i64 2
+  %inc3 = getelementptr inbounds float, ptr %p, i64 3
+  %inc4 = getelementptr inbounds float, ptr %p, i64 4
+  %inc5 = getelementptr inbounds float, ptr %p, i64 5
+  %inc6 = getelementptr inbounds float, ptr %p, i64 6
+  %inc7 = getelementptr inbounds float, ptr %p, i64 7
+  %l0 = load float, ptr %p, align 4
+  %l1 = load float, ptr %inc1, align 2
+  %l2 = load float, ptr %inc2, align 2
+  %l3 = load float, ptr %inc3, align 2
+  %l4 = load float, ptr %inc4, align 2
+  %l5 = load float, ptr %inc5, align 2
+  %l6 = load float, ptr %inc6, align 2
+  %l7 = load float, ptr %inc7, align 2
+
+;  %e0 = fadd float %l0, %l0
+;  %e1 = fadd float %l1, %l1
+;  %e2 = fadd float %l2, %l2
+;  %e3 = fadd float %l3, %l3
+;  %e4 = fadd float %l4, %l4
+;  %e5 = fadd float %l5, %l5
+;  %e6 = fadd float %l6, %l6
+;  %e7 = fadd float %l7, %l7
+
+;  %red0 = fadd float %e0, %e1
+;  %red1 = fadd float %red0, %e2
+;  %red2 = fadd float %red1, %e3
+;  %red3 = fadd float %red2, %e4
+;  %red4 = fadd float %red3, %e5
+;  %red5 = fadd float %red4, %e6
+;  %red6 = fadd float %red5, %e7
+  %i1 = getelementptr inbounds float, ptr %dest, i64 1
+  %i2 = getelementptr inbounds float, ptr %dest, i64 2
+  %i3 = getelementptr inbounds float, ptr %dest, i64 3
+  %i4 = getelementptr inbounds float, ptr %dest, i64 4
+  %i5 = getelementptr inbounds float, ptr %dest, i64 5
+  %i6 = getelementptr inbounds float, ptr %dest, i64 6
+  %i7 = getelementptr inbounds float, ptr %dest, i64 7
+  store float %l0, ptr %dest, align 4
+  store float %l1, ptr %i1, align 2
+  store float %l2, ptr %i2, align 2
+  store float %l3, ptr %i3, align 2
+  store float %l4, ptr %i4, align 2
+  store float %l5, ptr %i5, align 2
+  store float %l6, ptr %i6, align 2
+  store float %l7, ptr %i7, align 2
+
+  %d1 = getelementptr inbounds float, ptr %dest2, i64 1
+  %d2 = getelementptr inbounds float, ptr %dest2, i64 2
+  %d3 = getelementptr inbounds float, ptr %dest2, i64 3
+  %d4 = getelementptr inbounds float, ptr %dest2, i64 4
+  %d5 = getelementptr inbounds float, ptr %dest2, i64 5
+  %d6 = getelementptr inbounds float, ptr %dest2, i64 6
+  %d7 = getelementptr inbounds float, ptr %dest2, i64 7
+  store float %l0, ptr %dest2, align 4
+  store float %l1, ptr %d1, align 2
+  store float %l2, ptr %d2, align 2
+  store float %l3, ptr %d3, align 2
+;  store float %l4, ptr %d4, align 2
+;  store float %l5, ptr %d5, align 2
+;  store float %l6, ptr %d6, align 2
+  store float %l7, ptr %d7, align 2
+
+;  %r0 = fadd float %e0, %e1
+;  %r1 = fadd float %r0, %e2
+;  %r2 = fadd float %r1, %e3
+;  %r3 = fadd float %r2, %e4
+;  %r4 = fadd float %r3, %e5
+;  %r5 = fadd float %r4, %e6
+;  %r6 = fadd float %r5, %e7
+;  store float %r2, ptr %dest2, align 4
+
+;  store float %e7, ptr %dest3, align 4
+  ret void
+}

``````````

</details>


https://github.com/llvm/llvm-project/pull/212658


More information about the llvm-commits mailing list