Files
clang-p2996/llvm/test/Transforms/SandboxVectorizer/bottomup_seed_slice.ll
vporpo 6312beef78 [SandboxVec][BottomUpVec] Use SeedCollector and slice seeds (#120826)
With this patch we switch from the temporary dummy seeds to actual seeds
provided by the seed collector.
The seeds get sliced and each slice is used as the starting point for
vectorization.
2025-01-09 11:53:48 -08:00

34 lines
1.3 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
; RUN: opt -passes=sandbox-vectorizer -sbvec-vec-reg-bits=1024 -sbvec-allow-non-pow2 -sbvec-passes="bottom-up-vec<>" %s -S | FileCheck %s
declare void @foo()
define void @slice_seeds(ptr %ptr, float %val) {
; CHECK-LABEL: define void @slice_seeds(
; CHECK-SAME: ptr [[PTR:%.*]], float [[VAL:%.*]]) {
; CHECK-NEXT: [[PTR0:%.*]] = getelementptr float, ptr [[PTR]], i32 0
; CHECK-NEXT: [[PTR1:%.*]] = getelementptr float, ptr [[PTR]], i32 1
; CHECK-NEXT: [[PTR2:%.*]] = getelementptr float, ptr [[PTR]], i32 2
; CHECK-NEXT: [[LD2:%.*]] = load float, ptr [[PTR2]], align 4
; CHECK-NEXT: store float [[LD2]], ptr [[PTR2]], align 4
; CHECK-NEXT: call void @foo()
; CHECK-NEXT: [[VECL:%.*]] = load <2 x float>, ptr [[PTR0]], align 4
; CHECK-NEXT: store <2 x float> [[VECL]], ptr [[PTR0]], align 4
; CHECK-NEXT: ret void
;
%ptr0 = getelementptr float, ptr %ptr, i32 0
%ptr1 = getelementptr float, ptr %ptr, i32 1
%ptr2 = getelementptr float, ptr %ptr, i32 2
%ld2 = load float, ptr %ptr2
store float %ld2, ptr %ptr2
; This call blocks scheduling of all 3 stores.
call void @foo()
%ld0 = load float, ptr %ptr0
%ld1 = load float, ptr %ptr1
store float %ld0, ptr %ptr0
store float %ld1, ptr %ptr1
ret void
}