mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-03 09:06:07 +00:00

Code generation now uses the start VPValue of induction recipes. This makes it possible to adjust the start value of the epilogue vector loop to use the 'resume' value of the main vector loop. Fixes #59459. Reviewed By: Ayal Differential Revision: https://reviews.llvm.org/D92132
39 lines
1.7 KiB
LLVM
39 lines
1.7 KiB
LLVM
; REQUIRES: asserts
|
|
; RUN: opt < %s -passes='loop-vectorize' -force-vector-width=2 -enable-epilogue-vectorization -epilogue-vectorization-force-VF=2 --debug-only=loop-vectorize -S 2>&1 | FileCheck %s
|
|
|
|
target datalayout = "e-m:e-i64:64-n32:64-v256:256:256-v512:512:512"
|
|
|
|
; Currently we cannot handle live-out variables that are recurrences.
|
|
; CHECK: LV: Checking a loop in 'f2'
|
|
; CHECK: LEV: Unable to vectorize epilogue because the loop is not a supported candidate.
|
|
|
|
define signext i32 @f2(ptr noalias %A, i32 signext %n) {
|
|
entry:
|
|
%cmp1 = icmp sgt i32 %n, 0
|
|
br i1 %cmp1, label %for.body.preheader, label %for.end
|
|
|
|
for.body.preheader: ; preds = %entry
|
|
%wide.trip.count = zext i32 %n to i64
|
|
br label %for.body
|
|
|
|
for.body: ; preds = %for.body.preheader, %for.body
|
|
%indvars.iv = phi i64 [ 0, %for.body.preheader ], [ %indvars.iv.next, %for.body ]
|
|
%arrayidx = getelementptr inbounds i8, ptr %A, i64 %indvars.iv
|
|
%0 = load i8, ptr %arrayidx, align 1
|
|
%add = add i8 %0, 1
|
|
%arrayidx3 = getelementptr inbounds i8, ptr %A, i64 %indvars.iv
|
|
store i8 %add, ptr %arrayidx3, align 1
|
|
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
|
|
%exitcond = icmp ne i64 %indvars.iv.next, %wide.trip.count
|
|
br i1 %exitcond, label %for.body, label %for.end.loopexit
|
|
|
|
for.end.loopexit: ; preds = %for.body
|
|
%inc.lcssa.wide = phi i64 [ %indvars.iv.next, %for.body ]
|
|
%1 = trunc i64 %inc.lcssa.wide to i32
|
|
br label %for.end
|
|
|
|
for.end: ; preds = %for.end.loopexit, %entry
|
|
%i.0.lcssa = phi i32 [ 0, %entry ], [ %1, %for.end.loopexit ]
|
|
ret i32 %i.0.lcssa
|
|
}
|