Как 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