Без заголовка
По поводу спотыкается на циклах - тут дело в принципиальных ограничениях. Если нет циклов и рекурсий, то задача решается относительно просто: дерево входных данных получается конечным, хотя возможно и очень большим. Тем не менее конечное дерево можно как-то пытаться обработать за разумное время, напеример, итеративно.
Если есть циклы и рекурсии, то все сложнее - в data flow анализе надо выходные данные учитывать как входные. Т.е. дерево входных данных вообще говоря получается неограниченное.
Тут два варианта: либо мы фиксируем размеры массивов, либо приходится делать консервативные обощения, последенее в конечном итоге и зарубает всю идею суперкомпиляции.
Первый же вариант - фиксированные размеры массивов - применим только в узких случаях, и вообще говоря, вместо него можно использовать метапрограммирование, т.е. просто генерировать специализированную версию программ. На мой взгляд, это проще и понятнее для программеров. Например, макросы в Lisp/Scheme/Nemerle, Template Haskell, MetaOCaml.