[llvm-dev] SCEV cannot compute the trip count of Simple loop

Sanjoy Das via llvm-dev llvm-dev at lists.llvm.org
Fri Sep 16 13:27:41 PDT 2016

Hi Deepali,

SCEV reports the backedge taken count as "((-1 * (sext i32 (3 + %x) to
i64))<nsw> + ((sext i32 (3 + %x) to i64) smax (sext i32 (6 + %x) to
i64)))", so symbolically it does have an answer.

Ideally SCEV should be able to exploit <nsw> on (3 + %x) and (6 + %x)
to fold the expression above to "3", but due to some systemic issues
SCEV can't exploit <nsw> as aggressively as we should.

Without exploiting <nsw> the trip count is 2^32, which does not fit in
an 32 bit unsigned integer.  This is why getSmallConstantTripCount
returns 0.

Does this answer your question?

-- Sanjoy

More information about the llvm-dev mailing list