LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

Он там не может делать что угодно, потому что он не видит исходный код.

http://gcc.gnu.org/onlinedocs/gccint/Tree-SSA-passes.html

http://llvm.org/docs/Passes.html, http://llvm.org/docs/LangRef.html

http://en.wikipedia.org/wiki/Static_single_assignment_form

А как он будет его делать, если компилятор получает на вход не цикл, как единицу компиляции, а его «развертку» в виде goto?

Он строит CFG (у SBCL IR1 это тоже CFG).

Попробуй

clang -S -O0 -emit-llvm loop.c -o loop.ll
clang -S -O3 -emit-llvm loop.ll -o loop-opt.ll

Не получится, т.к. в лиспе много сделано на макросах, без макросов это будет «метаассемблер» с примитивщиной, типа tagbody/go, let и т.д.

Ну ок (как только найдём пример проблемы).

Исходная версия quasimoto, :

Он там не может делать что угодно, потому что он не видит исходный код.

http://gcc.gnu.org/onlinedocs/gccint/Tree-SSA-passes.html

http://llvm.org/docs/Passes.html

http://en.wikipedia.org/wiki/Static_single_assignment_form

А как он будет его делать, если компилятор получает на вход не цикл, как единицу компиляции, а его «развертку» в виде goto?

Он строит CFG (у SBCL IR1 это тоже CFG).

Попробуй

clang -S -O0 -emit-llvm loop.c -o loop.ll
clang -S -O3 -emit-llvm loop.ll -o loop-opt.ll

Не получится, т.к. в лиспе много сделано на макросах, без макросов это будет «метаассемблер» с примитивщиной, типа tagbody/go, let и т.д.

Ну ок (как только найдём пример проблемы).