HomePhabricator

[LoopVectorize] Fix crash on "getNoopOrZeroExtend cannot truncate!" (PR45259)

Authored by vsk on Mar 30 2020, 10:02 AM.

Description

[LoopVectorize] Fix crash on "getNoopOrZeroExtend cannot truncate!" (PR45259)

In InnerLoopVectorizer::getOrCreateTripCount, when the backedge taken
count is a SCEV add expression, its type is defined by the type of the
last operand of the add expression.

In the test case from PR45259, this last operand happens to be a
pointer, which (according to llvm::Type) does not have a primitive size
in bits. In this case, LoopVectorize fails to truncate the SCEV and
crashes as a result.

Uing ScalarEvolution::getTypeSizeInBits makes the truncation work as expected.

https://bugs.llvm.org/show_bug.cgi?id=45259

Differential Revision: https://reviews.llvm.org/D76669