это и там тоже нелогично: технически аргументы — это те же самые локалы. никакое SSA не запрещает менять локалы, иначе оно бесполезно же.

просто у Nanojit изначально была заточка под житование javascript'а (или actionscript'а, что почти одно и то же). там в любом случае передают указатели на объекты, так что особого смысла в инструкции присваивания аргументу нет. вот и не сделали.

там, например, и понятия «функция возвращает ничего» нет — в js так не бывает. можно, конечно, обойти, возвращая тупо нолик, но я добавил `retv` (void, в смысле).

забавно, что NanojitпочтиSSA… но почему-то этот последний шаг делать не стали. хотя там внутри даже попытки сэмулировать фита-ноды есть. к сожалению, консервативно, явно их создавать нельзя.

я бы, конечно, и с нуля кодоген на SSA сделал, но у Nanojit есть бэкэнды к x86_64 и ARM. на них у меня ушло бы слишком много усилий — в связи с отсутствием такого же опыта, как с x86.

а LLVM мне неинтересен в связи с монструозностью. Nanojit я могу просто кинуть в проект и всё, там даже STL не используется. есть ещё libJIT, она даже местами лучше (и SSA, и на чистом си), но её тоже не выйдет «просто кинуть и забыть».

на самом деле (я, вроде бы, писал уже) весь этот проект — это я пытаюсь оценить, насколько имеет смысл плотно возиться с Nanojit. то бишь, насколько трудоёмко будет использовать нано для AOT-компиляции реального языка. я в курсе, что JIT-ы придуманы не для этого, но почему бы и да? ;-) меня устраивает посредственный код, но быстро и в рантайме.