Я хочу автоматически переписывать простые вложенные циклы как не вложенные. Например, у меня есть следующий код:
if (y >= 0)
{
while (x>y)
{
x -= y+1;
for (z=y; z>0; z--) /* nothing */;
}
}
И я бы хотел, чтобы какое-то llvm magi c произошло так, чтобы оно стало:
if (y >= 0)
{
bool outer = true;
while (x>y)
{
if (outer) { z = y; }
if (z > 0) { z--; outer = false; }
else { x-= y+1; outer = true; }
}
}
Неужели я слишком оптимистичен, думая, что такой проход существует? Я пытался написать opt --help > /tmp/passes.txt && grep "loop" /tmp/passes.txt
, но есть так много проходов l oop, что я не знаю, с чего начать.