[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