[llvm] r273079 - [SCEV] Fix incorrect trip count computation
Sanjoy Das via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 19 21:43:53 PDT 2016
Hi Eli,
Eli Friedman wrote:
> Sanjoy Das wrote:
> I'm pretty sure we don't actually do this folding.
Yeah that seemed to be "obvious enough" that I didn't bother checking. :)
In any case, if / once we are able to prove the tripcount of a loop
is, say, smax(V, V +nsw 10) then teaching getSMax to fold smax(V,
V +nsw 10) into V +nsw 10 seems like the right layering.
> But there are other issues; we do actually infer nsw in the
> @nswnowrap testcase, but we can't do anything useful with it because we infer it after we build the smax expression.
Are you talking about this case, in nsw.ll ?
define void @nswnowrap(i32 %v) {
entry:
%add = add nsw i32 %v, 1
br label %for.body
for.body:
%i.04 = phi i32 [ %v, %entry ], [ %inc, %for.body ]
%inc = add nsw i32 %i.04, 1
tail call void @f(i32 %i.04)
%cmp = icmp slt i32 %i.04, %add
br i1 %cmp, label %for.body, label %for.end
for.end:
ret void
}
?
Then it does not look like SCEV ever infers `%add` is a nsw-add -- I tried
`opt -analyze -scalar-evolution -scalar-evolution` and it gave me
%add = add nsw i32 %v, 1
--> (1 + %v) U: full-set S: full-set
both times.
-- Sanjoy
More information about the llvm-commits
mailing list