немедленный тест номера в llvm - PullRequest
1 голос
/ 27 апреля 2011

В LLVM я хотел бы проверить, является ли счетчик поездок, полученный с помощью прохода LoopInfo, непосредственным числом.Например, следующий цикл

for(i=0; i<10; i++) { ... }

имеет счетчик отключений 10, и это непосредственное число.Функция-член Loop getTripCount() может быть вызвана для получения значения, представляющего счетчик поездок.Как я могу решить, что это значение является непосредственным числом или нет?

1 Ответ

0 голосов
/ 27 февраля 2013

Используйте следующий метод получения, предоставленный анализом Scalar Evolution:

unsigned ScalarEvolution::getSmallConstantTripCount(Loop *L, BasicBlock *ExitingBlock)

/// getSmallConstantTripCount - Returns the maximum trip count of this loop as a
/// normal unsigned value. Returns 0 if the trip count is unknown or not
/// constant. Will also return 0 if the maximum trip count is very large (>=
/// 2^32).
///
/// This "trip count" assumes that control exits via ExitingBlock. More
/// precisely, it is the number of times that control may reach ExitingBlock
/// before taking the branch. For loops with multiple exits, it may not be the
/// number times that the loop header executes because the loop may exit
/// prematurely via another branch.
...