Анализ живого диапазона (интервала) на llvm - PullRequest
0 голосов
/ 08 января 2019

Как llvm вычисляет живые диапазоны (интервалы) своих временных значений? Вот пример файла C:

$ cat main.c
int main()
{
    int i = 200;
    int j = 300;
    while (j)
    {
        i=i+1;
        j=j-1;
    }
    return 0;
}

Я выполняю следующие команды, а затем проверяю и main.ll, и main.mem2reg.ll. Я, вероятно, ошибаюсь, но похоже, что вычисление реальных диапазонов намного проще на main.ll (?) - это mem2reg важный проход при вычислении реального диапазона? или это хорошо для определенных оптимизаций?

$ clang -c -emit-llvm -O0 main.c -o main.bc
$ opt -instnamer main.bc -o main.bc
$ opt -mem2reg main.bc -o main.mem2reg.bc
$ llvm-dis main.bc
$ llvm-dis main.mem2reg.bc

1 Ответ

0 голосов
/ 17 января 2019

Чтобы выполнить анализ диапазона в реальном времени, вам, возможно, понадобятся некоторые знания о анализе живучести или вы можете оформить аннотацию крана подъема . Передав mem2reg, просто преобразуйте ИК в форму SSA, но для анализа диапазона в реальном времени, я думаю, это не обязательно.

У меня есть простая реализация анализа переменных в реальном времени с помощью llvm, пожалуйста, проверьте мой репозиторий GitHub: https://github.com/lijiansong/clang-llvm-tutorial/tree/master/live-variable-analysis

...