История изменений
Исправление 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 и т.д.
Ну ок (как только найдём пример проблемы).