blob: aacac62a75df4354789756b13d55a1561097b0d6 [file]
; REQUIRES: asserts
; IC=1, VF=4, epilogue VF=4: dead epilogue.
; RUN: opt < %s -passes='loop-vectorize' -force-vector-width=4 \
; RUN: -force-vector-interleave=1 -enable-epilogue-vectorization \
; RUN: -epilogue-vectorization-force-VF=4 --debug-only=loop-vectorize \
; RUN: --disable-output -S 2>&1 | FileCheck %s --check-prefix=DEAD-IC1
; IC=1, VF=4, epilogue VF=8: dead epilogue.
; RUN: opt < %s -passes='loop-vectorize' -force-vector-width=4 \
; RUN: -force-vector-interleave=1 -enable-epilogue-vectorization \
; RUN: -epilogue-vectorization-force-VF=8 --debug-only=loop-vectorize \
; RUN: --disable-output -S 2>&1 | FileCheck %s --check-prefix=DEAD-IC1
; IC=2, VF=4, epilogue VF=4: epilogue is NOT dead.
; RUN: opt < %s -passes='loop-vectorize' -force-vector-width=4 \
; RUN: -force-vector-interleave=2 -enable-epilogue-vectorization \
; RUN: -epilogue-vectorization-force-VF=4 --debug-only=loop-vectorize \
; RUN: --disable-output -S 2>&1 | FileCheck %s --check-prefix=NOT-DEAD-IC2
; IC=2, VF=4, epilogue VF=8: dead epilogue.
; RUN: opt < %s -passes='loop-vectorize' -force-vector-width=4 \
; RUN: -force-vector-interleave=2 -enable-epilogue-vectorization \
; RUN: -epilogue-vectorization-force-VF=8 --debug-only=loop-vectorize \
; RUN: --disable-output -S 2>&1 | FileCheck %s --check-prefix=DEAD-IC2
; DEAD-IC1: LV: Checking a loop in 'simple_memset'
; DEAD-IC1: LEV: Forced epilogue VF results in dead epilogue vector loop, skipping vectorizing epilogue.
; NOT-DEAD-IC2: LV: Checking a loop in 'simple_memset'
; NOT-DEAD-IC2: LEV: Epilogue vectorization factor is forced.
; DEAD-IC2: LV: Checking a loop in 'simple_memset'
; DEAD-IC2: LEV: Forced epilogue VF results in dead epilogue vector loop, skipping vectorizing epilogue.
define void @simple_memset(ptr %dst, i64 %N) {
entry:
br label %loop
loop:
%iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
%gep = getelementptr inbounds i32, ptr %dst, i64 %iv
store i32 0, ptr %gep, align 4
%iv.next = add nuw nsw i64 %iv, 1
%exitcond = icmp eq i64 %iv.next, %N
br i1 %exitcond, label %exit, label %loop
exit:
ret void
}