[LoopVectorize] Change comment for isOutOfScope in collectLoopUniforms, NFC
Update comment for isOutOfScope and add a testcase for uniform value being used out of scope. Differential Revision: https://reviews.llvm.org/D23073 llvm-svn: 277515
This commit is contained in:
parent
dabcee8b2c
commit
dc7001afb2
|
@ -4946,10 +4946,11 @@ void LoopVectorizationLegality::collectLoopScalars() {
|
||||||
|
|
||||||
void LoopVectorizationLegality::collectLoopUniforms() {
|
void LoopVectorizationLegality::collectLoopUniforms() {
|
||||||
// We now know that the loop is vectorizable!
|
// We now know that the loop is vectorizable!
|
||||||
// Collect variables that will remain uniform after vectorization.
|
// Collect instructions inside the loop that will remain uniform after
|
||||||
|
// vectorization.
|
||||||
|
|
||||||
// If V is not an instruction inside the current loop, it is a Value
|
// Global values, params and instructions outside of current loop are out of
|
||||||
// outside of the scope which we are interesting in.
|
// scope.
|
||||||
auto isOutOfScope = [&](Value *V) -> bool {
|
auto isOutOfScope = [&](Value *V) -> bool {
|
||||||
Instruction *I = dyn_cast<Instruction>(V);
|
Instruction *I = dyn_cast<Instruction>(V);
|
||||||
return (!I || !TheLoop->contains(I));
|
return (!I || !TheLoop->contains(I));
|
||||||
|
|
|
@ -48,3 +48,30 @@ for.body:
|
||||||
for.end:
|
for.end:
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; CHECK-LABEL: goo
|
||||||
|
; Check %indvars.iv and %indvars.iv.next are uniform instructions even if they are used outside of loop.
|
||||||
|
; CHECK-DAG: LV: Found uniform instruction: %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
|
||||||
|
; CHECK-DAG: LV: Found uniform instruction: %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
|
||||||
|
; CHECK-DAG: LV: Found uniform instruction: %exitcond = icmp eq i64 %indvars.iv, 1599
|
||||||
|
|
||||||
|
define i64 @goo(float* noalias nocapture %a, float* noalias nocapture readonly %b) #0 {
|
||||||
|
entry:
|
||||||
|
br label %for.body
|
||||||
|
|
||||||
|
for.body: ; preds = %for.body, %entry
|
||||||
|
%indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]
|
||||||
|
%arrayidx = getelementptr inbounds float, float* %b, i64 %indvars.iv
|
||||||
|
%tmp0 = load float, float* %arrayidx, align 4
|
||||||
|
%add = fadd float %tmp0, 1.000000e+00
|
||||||
|
%arrayidx5 = getelementptr inbounds float, float* %a, i64 %indvars.iv
|
||||||
|
store float %add, float* %arrayidx5, align 4
|
||||||
|
%indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
|
||||||
|
%exitcond = icmp eq i64 %indvars.iv, 1599
|
||||||
|
br i1 %exitcond, label %for.end, label %for.body
|
||||||
|
|
||||||
|
for.end: ; preds = %for.body
|
||||||
|
%retval = add i64 %indvars.iv, %indvars.iv.next
|
||||||
|
ret i64 %retval
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue